2012-02-06 75 views
0

我有这样的代码:为什么我在这段代码中得到一个System.NullReferenceException?

IList<MyObject> myObjects = new List<MyObject>(); 
if (param != null) 
{ 
    myObjects = (from ... LINQ1 ...).ToList(); 
} 
else 
{ 
    myObjects = (from ... LINQ2 ...).ToList(); 
} 

foreach (MyObject myObject in myObjects) 
{ 
} 

当在foreach开始,我得到一个System.NullReferenceException。为什么?我该如何解决它?看起来很奇怪......

+13

你没有给我们足够的代码知道。也许你的一个查询包含一个空引用,你正在比较等使用?一个简短但完整的程序来证明问题会有所帮助。而且,如果你只是要覆盖它,那么给予'myObjects'初始值就没有意义了。 – 2012-02-06 11:55:26

+0

请发表整个代码。问题可能出在您删除的代码片段中。 – 2012-02-06 11:56:00

+0

另外,为什么你初始化'myObjects'? – 2012-02-06 11:56:20

回答

1

您的对象正被一个LINQ查询覆盖,这很可能返回一个空值。

也是myObjects的意思是一个IList<MyObject>List<MyObject>

+0

如何? “......)ToList();”。应该返回一个列表,即使是空的。 – TomTom 2012-02-06 11:59:23

+0

@TomTom,是的,但有可能编写一个返回null ref异常的linq查询,因为查询中的某些内容,To List只是枚举项目并执行表达式 – 2012-02-06 12:03:01

+0

是的,那是可能的 - 未显示的部分在评估时抛出空引用。 – TomTom 2012-02-06 12:10:04

相关问题