为什么可以';调试器/运行时是否告诉我哪个对象为空

本文关键字:告诉我 是否 对象 运行时 调试器 为什么 | 更新日期: 2023-09-27 18:05:40

代码:

items.FirstOrDefault(x => x.Foo.Bar.BarId == snuh.BarId);

错误:

System.NullReferenceException:对象引用未设置为实例对象的。

空对象可以是itemsFooBarsnuh

调试器/运行时可以告诉我错误发生在哪行代码上。为什么它不能告诉我问题出在哪个物体上?

注意:我知道我可以调试这个并找到答案。Visual Studio不能向我提供有问题的对象的名称是什么原因?

为什么可以';调试器/运行时是否告诉我哪个对象为空

因为调试器或编译器有源符号,所以它们可以将名称映射到地址。

然而,运行时不知道引用在源代码中是如何命名的(它已经编译(。

请注意,如果抛出了NullReferenceException(而不是CLR(,则可以在嵌入的消息中添加任何信息。

由于优化等原因,"存储在寄存器R22/位于堆栈槽5中的此引用"与该引用的实际获取方式之间的关系可能很难推导。

此刻,它只知道有人试图取消引用它,结果它是NULL

通常,它试图取消引用的内容在源代码中可能也没有一个清晰/可理解的名称。

在大多数语言中,接收空指针而不指定对象是很常见的。我很确定这是因为它一开始就找不到对象来告诉你它是什么。