Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从类中获取列表时出错_C#_List_Class_Ienumerable - Fatal编程技术网

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遇到问题时,他可以为自己选择最好的方法@史蒂夫