代码:
items.FirstOrDefault(x => x.Foo.Bar.BarId == snuh.BarId);
错误:
System.NullReferenceException:未将对象引用设置为实例 一个对象。
null对象可以是items
,Foo
,Bar
或snuh
。
调试器/运行时可以告诉我发生错误的代码行。为什么它也不能告诉我哪个对象是问题?
注意:我知道我可以调试这个并找到答案。有没有理由Visual Studio无法向我提供违规对象的名称?
答案 0 :(得分:3)
因为调试器或编译器具有源符号,所以他们可以将名称映射到地址。
然而,运行时不知道如何在源代码中命名引用(它已被编译)。
请注意,如果您(而不是CLR)抛出了NullReferenceException,那么您可以在嵌入消息中添加任何信息。
答案 1 :(得分:2)
由于优化等,“存储在寄存器R22
中的此引用/位于堆栈槽5
中”与实际获得该引用的方式之间的关系可能很难推断出来。
所有它知道,此刻,有人试图取消引用它,结果证明是NULL
。
通常情况下,它试图取消引用的内容也可能在源代码中没有明确/可理解的名称。
答案 2 :(得分:0)
在大多数语言中接收空指针但不指定对象很常见。我很确定它是因为它无法在第一时间找到对象以告诉你它是什么。