如何在以下场景中获得NullReferenceException
?
Dim langs As IEnumerable(Of SomeCustomObject) = //some LINQ query
If langs Is Nothing Then Return Nothing
If langs.Count = 1 Then //NullReferenceException here
我在这里缺少什么?调试显示langs
实际上只是一个没有任何结果的LINQ查询结果......
答案 0 :(得分:9)
异常可能来自对LINQ查询的评估。 LINQ查询以惰性方式进行评估:即,在实际使用值之前,实际上不会执行任何代码。
例如,如果你有以下内容(我不知道VB的LINQ语法,所以这是C#,但同样适用):
string str = null;
IEnumerable<char> chs = from ch in str select ch;
if (chs.Count() == 0) // NullReferenceException here
此外,您永远不会从创建LINQ查询返回null
,因此不需要进行If langs Is Nothing
检查。
答案 1 :(得分:0)
因为在访问lang之前不会对其进行评估,所以您可以通过转换为列表来强制进行评估:
Dim langs As IEnumerable(Of SomeCustomObject) = //some LINQ query
Dim langsList as List(Of SomeCustomObject) = langs.ToList()
If langsList Is Nothing Then Return Nothing
If langsList.Count = 1 Then //NullReferenceException here