C#中将字符串转换为字符数组导致错误。

4

基本上我正在用C#制作一个猜单词游戏,但问题在于每当我尝试使用 word.ToCharArray(); 将我的 string 单词转换为 char[] 时,它就无法正常工作。

有人可以找出这段代码的问题吗?

List<string> words = new List<string>();
List<string> guessedLetters = new List<string>();
string word = "sword";

// Turning word into char array
char[] letters = word.ToCharArray(); 

CS0236 一个字段初始化器不能引用非静态字段、方法或属性“Form1.word” final C:\Users*\Desktop\final\final\Form1.cs 20 Active


看起来你正在对实例字段进行方法体外的操作。如果这是你想要做的,请将 letters 的初始化放在构造函数中,或为你的代码定义一个适当的方法。 - Anthony Pegram
请发布您正在使用的完整代码。 - Amnesh Goel
5个回答

1

目前已知,您有一个名为Form1的类:

public class Form1 {
      List<string> words = new List<string>();
      List<string> guessedLetters = new List<string>();
      string word = "sword";
      //...
      public static void Main(string[]args){
          char[] letters = word.ToCharArray(); 
      }
}

如果是这种情况,那么你的做法是错误的。你需要一个 Form1 类的对象才能使用变量 word
      public static void Main(string[]args){
          Form1 F1 = new Form1();
          char[] letters = F1.word.ToCharArray(); 
      }

0

来自Microsoft Docs: "实例字段不能用于在方法外初始化其他实例字段。"

这是编译器的决定,就是这样。或者设置一个常量和一个变量,像品味一样的小东西,这些都是设计决策,它们背后有季节性的原因,大或小。

您可以通过将word设置为static来解决问题,但我不知道这是否符合您的要求。


0

我猜你有类似这样可以用 static 修复的问题。
但这可能不是最好的设计。

class Program
{
    List<string> words = new List<string>();
    List<string> guessedLetters = new List<string>();
    static string word = "sword";
    char[] letters = word.ToCharArray();

这可能是一个更好的设计:

public List<string> words { get; } = new List<string>();
public List<string> guessedLetters { get; } = new List<string>();
public string word { get; set; } = "sword";
public char[] letters { get { return word.ToCharArray(); } }

0

错误提示在静态方法调用时需要静态字段,因此将单词更改为static -

static string word = "sword";

0

从技术上讲,你可以将初始化移入到构造函数中:

  public partial class Form1: Form {
    ...
    List<string> words = new List<string>();
    List<string> guessedLetters = new List<string>();
    string word;

    // Turning word into char array
    char[] letters;

    public Form1() {
      word = "sword"; 
      letters = word.ToCharArray();         
    }  
  }

另一种可能性是声明属性:每当您想要将word拆分成字母时,只需调用letters属性。
  public partial class Form1: Form {
    ...
    List<string> words = new List<string>();
    List<string> guessedLetters = new List<string>();
    string word = "sword";

    ...

    private char[] letters {
      get {
        return null == word 
          ? new char[0]
          : word.ToCharArray(); 
      }
    } 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接