为什么可以';调试器/运行时是否告诉我哪个对象为空
本文关键字:告诉我 是否 对象 运行时 调试器 为什么 | 更新日期: 2023-09-27 18:05:40
代码:
items.FirstOrDefault(x => x.Foo.Bar.BarId == snuh.BarId);
错误:
System.NullReferenceException:对象引用未设置为实例对象的。
空对象可以是items
、Foo
、Bar
或snuh
。
调试器/运行时可以告诉我错误发生在哪行代码上。为什么它不能告诉我问题出在哪个物体上?
注意:我知道我可以调试这个并找到答案。Visual Studio不能向我提供有问题的对象的名称是什么原因?
因为调试器或编译器有源符号,所以它们可以将名称映射到地址。
然而,运行时不知道引用在源代码中是如何命名的(它已经编译(。
请注意,如果抛出了NullReferenceException(而不是CLR(,则可以在嵌入的消息中添加任何信息。
由于优化等原因,"存储在寄存器R22
/位于堆栈槽5
中的此引用"与该引用的实际获取方式之间的关系可能很难推导。
此刻,它只知道有人试图取消引用它,结果它是NULL
。
通常,它试图取消引用的内容在源代码中可能也没有一个清晰/可理解的名称。
在大多数语言中,接收空指针而不指定对象是很常见的。我很确定这是因为它一开始就找不到对象来告诉你它是什么。