Ошибка в C # Script for Unity, как мне прочитать этот CSV-файл в массив? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь работать над этой игрой в Unity для класса.Одним из требований является чтение слов из CSV-файла случайных слов в массив.У меня все работает в программе, когда я вручную создаю массив слов, но я не могу до конца жизни понять, как я должен читать файл CSV в массив.Ни одно из решений, которые я нашел в Интернете, ничего не делает, кроме ошибок компиляции.Вот код для скрипта, который я должен генерировать слова.

Я пытался использовать «StreamReader» и даже не могу понять, как он работает, и все остальные решения, которые я нашел на этом сайте.Все они разные и ничего не работает.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GenerateWords : MonoBehaviour {

    TextAsset words = Resources.Load<TextAsset>("words");
    private static string[] wordList = words.text.Split(new char[] { '\n' });

    public static string GetRandomWord ()
    {
        int randomIndex = Random.Range(0, wordList.Length);
        string randomWord = wordList[randomIndex];

        return randomWord;
    }
}

Получение этой ошибки:

Assets / Scripts / GenerateWords.cs (28,40): ошибка CS0236: инициализатор поля не можетссылка на нестатическое поле, метод или свойство `GenerateWords.words '

1 Ответ

0 голосов
/ 19 февраля 2019

Проблема в том, что wordList помечен как static, но затем используется words, который не является статичным.

Поскольку переменная static может использоваться без инициализации экземпляра класса, компилятор не может позволить ей полагаться на нестатическую переменную, поскольку нестатическая переменная не может существовать, когда класс не имеетбыл созданЭто связано с тем, что может возникнуть ситуация, когда кто-то хочет использовать wordList, а потому что это static, не в контексте какого-либо конкретного экземпляра объекта этого типа.Поскольку words может принадлежать только определенной копии класса, wordList никогда не сможет получить к ней доступ, если она не находится в контексте класса.

Возможно, вы найдете более ясные объяснения статических свойств и методов в других местах.в сети, но это мой основной подход.

В любом случае, самый простой способ решить вашу проблему - сделать все ваши свойства статичными:

Изменить

TextAsset words = Resources.Load<TextAsset>("words");

на

static TextAsset words = Resources.Load<TextAsset>("words");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...