.NET - 非常奇怪的NullReferenceException?

Rop*_*tah 2 linq vb.net nullreferenceexception

如何NullReferenceException在以下场景中获得?

 Dim langs As IEnumerable(Of SomeCustomObject) = //some LINQ query
 If langs Is Nothing Then Return Nothing 
 If langs.Count = 1 Then //NullReferenceException here
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?Debug显示这langs实际上只是一个没有任何结果的LINQ queryresult ...

Dea*_*ing 9

例外情况可能来自对LINQ查询的评估.LINQ查询以惰性方式进行评估:即,在实际使用该值之前,实际上不会执行任何代码.

例如,如果你有以下(我不知道VB的LINQ语法,所以这是C#,但同样的事情适用):

string str = null;
IEnumerable<char> chs = from ch in str select ch;
if (chs.Count() == 0) // NullReferenceException here
Run Code Online (Sandbox Code Playgroud)

此外,您永远不会null从创建LINQ查询返回,因此If langs Is Nothing不需要您的检查.

  • @ropstah:你可以发布实际的LINQ查询和堆栈跟踪吗? (2认同)