C# 从类中获取列表时出错
我创建了这个类:C# 从类中获取列表时出错,c#,list,class,ienumerable,C#,List,Class,Ienumerable,我创建了这个类: class Riconoscimento { private List<Word> words = new List<Word>(); public List<Word> GetList() { return words; } public void loadWords() { string[] lines = File.ReadAllLines(Envir
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]) });
}
}
}
class Riconoscimento
{
私有列表单词=新列表();
公共列表GetList()
{
返回单词;
}
公共词汇
{
string[]lines=File.ReadAllLines(Environment.CurrentDirectory+“/../../../words.txt”);
foreach(行中的字符串行)
{
//跳过注释块和空行。。
如果(line.StartsWith(“-”)| | line==String.Empty)继续;
//分道扬镳
var parts=line.Split(新字符[]{'|'});
//将commandItem添加到列表以供以后查找或执行
Add(new Word(){Text=parts[0],AttachedText=parts[1],IsShellCommand=(parts[2]));
}
}
}
但是在加载loadWords()之后,当我试图用
public void引擎\u单词已识别(对象发送者,SpeechRecognitizedEventArgs e)
{
Riconoscimento_Riconoscimento=新Riconoscimento();
List words=_riconoscimento.GetList();
var cmd=words.Where(c=>c.Text==e.Result.Text).First();
}
此错误可能是:
System.InvalidOperationException-序列不包含元素。
就像它无法从课堂上检索单词一样,我不明白为什么。
如果我不使用该类,而是将所有内容都放在主代码中,它就会工作。
我该怎么办
问题已解决:我在另一个void中加载了loadWords(),我必须将其加载到另一个void中。该错误来自对
的第一次调用
。在创建Riconoscimento
之后,您没有调用loadWords
,因此列表永远不会填充。如果您在某个地方有另一个实例已经加载了数据,那么您可以使用它,或者您也可以将words
设置为静态,如果每个实例的数据相同
此外,如果列表可能不包含您要查找的值,则
FirstOrDefault
将返回null
,而不是抛出异常 该错误来自对First
的调用。在创建Riconoscimento
之后,您没有调用loadWords
,因此列表永远不会填充。如果您在某个地方有另一个实例已经加载了数据,那么您可以使用它,或者您也可以将words
设置为静态,如果每个实例的数据相同
此外,如果列表可能不包含您要查找的值,则
FirstOrDefault
将返回null
,而不是抛出异常 您没有调用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();
}
public void引擎\u单词已识别(对象发送者,SpeechRecognitizedEventArgs e)
{
Riconoscimento_Riconoscimento=新Riconoscimento();
_riconoscimento.loadWords();
List words=_riconoscimento.GetList();
var cmd=words.Where(c=>c.Text==e.Result.Text).First();
}
您没有调用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();
}
public void引擎\u单词已识别(对象发送者,SpeechRecognitizedEventArgs e)
{
Riconoscimento_Riconoscimento=新Riconoscimento();
_riconoscimento.loadWords();
List words=_riconoscimento.GetList();
var cmd=words.Where(c=>c.Text==e.Result.Text).First();
}
您不能调用loadWords
。您只需从该属性获取一个空列表
public List<Word> GetList()
{
return words;
}
_riconoscimento.loadWords();
private List<Word> words = null; // initialize new list list inside loadWords
public List<Word> GetList()
{
if(words == null) loadWords();
return words;
}
或者从内部属性调用它
public List<Word> GetList()
{
return words;
}
_riconoscimento.loadWords();
private List<Word> words = null; // initialize new list list inside loadWords
public List<Word> GetList()
{
if(words == null) loadWords();
return words;
}
private List words=null;//初始化loadWords中的新列表
公共列表GetList()
{
如果(words==null)loadWords();
返回单词;
}
您不能调用loadWords
。您只需从该属性获取一个空列表
public List<Word> GetList()
{
return words;
}
_riconoscimento.loadWords();
private List<Word> words = null; // initialize new list list inside loadWords
public List<Word> GetList()
{
if(words == null) loadWords();
return words;
}
或者从内部属性调用它
public List<Word> GetList()
{
return words;
}
_riconoscimento.loadWords();
private List<Word> words = null; // initialize new list list inside loadWords
public List<Word> GetList()
{
if(words == null) loadWords();
return words;
}
private List words=null;//初始化loadWords中的新列表
公共列表GetList()
{
如果(words==null)loadWords();
返回单词;
}
列表为空。在loadWords()
中设置一个断点,并确保您的单词已加载。我知道它是空的,但我不知道为什么。如果我在主窗体中而不是在类中使用此loadWords,同时也在主窗体中创建列表,则它会起作用。在引擎中,words确认您正在创建Riconoscimento的新(本地)实例并调用GetList(),而不在其上调用loadWords:其内部单词列表仍然为空。列表为空。在loadWords()
中设置一个断点,并确保您的单词已加载。我知道它是空的,但我不知道为什么。如果我在主窗体中而不是在类中使用此loadWords,同时也在主窗体中创建列表,则它会起作用。在引擎中,您认识到您正在创建Riconoscimento的一个新(本地)实例并调用GetList(),而不在其上调用loadWords:其内部单词列表仍然为空他说“加载loadWords()后”我把它称为我的另一个虚空,在主窗体内。我必须在这个里面再次调用它吗?你应该调用新创建的实例。他说“加载loadWords()后”,我在我的另一个void,mainForms里面调用它。我必须在这个例子中再次调用它吗?你应该调用新创建的实例。有很多方法可以做到这一点。另一种方法是在构造函数内进行此调用。我不知道这个方法应该多久调用一次。但当OP遇到问题时,他可以为自己选择最好的方法@有很多方法可以做到这一点。另一种方法是在构造函数内进行此调用。我不知道这个方法应该多久调用一次。但当OP遇到问题时,他可以为自己选择最好的方法@史蒂夫