строка в массив символов c # приводит к ошибке - PullRequest
0 голосов
/ 01 июня 2018

По сути, я делаю игру в палач на C #, но проблема заключается в том, что всякий раз, когда я пытаюсь превратить свое string слово в char[] с word.ToCharArray();, оно не работает.

Может кто-нибудь разобратьсячто не так с этим кодом?

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

Ответы [ 5 ]

0 голосов
/ 01 июня 2018

Из документов Microsoft: "Поля экземпляра нельзя использовать для инициализации других полей экземпляра вне метода."

Это решение компилятора, и оно так и есть.Или установление константы с помощью переменной, такие мелочи, как дизайнерские решения, и за ними стоят времена, большие или маленькие, как дело вкуса.

Вы можете исправить это, сделав word a static, ноЯ не знаю, хотите ли вы этого.

0 голосов
/ 01 июня 2018

Технически, вы можете переместить инициализацию в конструктор :

  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(); 
      }
    } 
0 голосов
/ 01 июня 2018

Я подозреваю, что у вас есть что-то подобное, что вы можете исправить с помощью 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 голосов
/ 01 июня 2018

ошибка говорит о том, что для статического метода для вызова требуется статическое поле, поэтому измените слово на статическое -

static string word = "sword";
0 голосов
/ 01 июня 2018

Пока что известно, у вас есть класс с именем 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(); 
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...