从类中获取列表时出错
本文关键字:出错 列表 获取 | 更新日期: 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;
}