从类中获取列表时出错

本文关键字:出错 列表 获取 | 更新日期: 2023-09-27 18:21:21

我创建了这个类:

class Riconoscimento
{
    private List<Word> words = new List<Word>();

    public List<Word> GetList()
    {
        return words;
    }
    public void loadWords()
    {
        string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "/../../words.txt");
            foreach (string line in lines)
            {
                // skip commentblocks and empty lines..
                if (line.StartsWith("--") || line == String.Empty) continue;
                // split the line
                var parts = line.Split(new char[] { '|' });
                // add commandItem to the list for later lookup or execution
                words.Add(new Word() { Text = parts[0], AttachedText = parts[1], IsShellCommand = (parts[2]) });

            }
      }
}

但是在加载loadWords()之后,当我试图用从MainForm中的类中获取单词时

 public void engine_WordsRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        Riconoscimento _riconoscimento = new Riconoscimento();
        List<Word> words = _riconoscimento.GetList();
        var cmd = words.Where(c => c.Text == e.Result.Text).First();
}

此错误发生在:System.InvalidOperationException-序列不包含元素

它好像无法从课堂上检索单词,我不明白为什么。如果我不使用这个类,而是把所有东西都放在我的主代码中,它就可以工作了。我该怎么办?

问题解决了:我在我的另一个虚空中加载了loadWords(),我必须在我的其他虚空中加载它。

从类中获取列表时出错

您没有调用loadWords()。这就是为什么什么都没有加载。

public void engine_WordsRecognized(object sender, SpeechRecognizedEventArgs e)
{
    Riconoscimento _riconoscimento = new Riconoscimento();
    _riconoscimento.loadWords();
    List<Word> words = _riconoscimento.GetList();
    var cmd = words.Where(c => c.Text == e.Result.Text).First();
}

该错误来自对First的调用。在创建Riconoscimento之后,您不会调用loadWords,因此列表永远不会被填充。如果您在某个地方有另一个已经加载了数据的实例,那么您可以使用它,或者如果words对于每个实例都是相同的,那么您也可以将其设置为静态的。

此外,如果列表可能不包含您要查找的值,那么FirstOrDefault将返回null,而不是抛出异常。

您不能调用loadWords。你只是从这个属性得到一个空列表。

public List<Word> GetList()
{
    return words;
}

在获取属性之前,您必须调用loadWords。

_riconoscimento.loadWords();

或者从物业内部进行调用。

private List<Word> words = null; // initialize new list list inside loadWords
public List<Word> GetList()
{
    if(words == null) loadWords();
    return words;
}