Why I get a System.NullReferenceException on this code?
我有这个代码:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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。为什么?我该怎么修?看起来很奇怪…
- 你没有给我们足够的密码让我们知道。也许您的一个查询包含一个空引用,您在比较等中使用它?一个简短但完整的程序来演示这个问题会有所帮助。另外,如果你想改写它,那么给myObjects一个初始值是没有意义的。
- 请把整个密码贴出来。问题可能出在您删除的代码片段中。
- 另外,为什么要初始化myObjects?
- 为我们提供异常的堆栈跟踪,这样我们就可以调查问题了
- 可能您必须使用list而不是ilist。请参阅stackoverflow.com/questions/1367539/ilistint-vs-listint
- 不可能的FTO帮助。错误在ni的某个地方:"(来自…Linq2…)。
您的对象正被一个LINQ查询覆盖,该查询很可能返回空值。
同样,myObjects是指IList还是List?
- 怎么样?"…).to list();"应该返回一个列表,即使是空的。
- @TomTom,是的,但是可以编写一个返回空引用异常的Linq查询,因为查询中有一些内容,所以to列表只是枚举项目并执行表达式。
- 是的,这是可能的-未显示的部分在计算时抛出一个空引用。
- @TomTom,你是说空值上的.to list()应该返回一个空列表吗?
- 不,我说过tolist总是返回一个列表,即使查询中没有元素。所以,结果永远不会是空的。但是:正如本所说,查询中的某些内容可能在评估时引发异常。