【发布时间】:2021-04-11 11:26:51
【问题描述】:
我知道一开始这似乎是不可能的,一开始我也觉得是这样,但最近我确实看到这种代码抛出了 NullReferenceException,所以这绝对是可能的。
不幸的是,Google 上几乎没有任何结果可以解释像 foo == null 这样的代码何时会引发 NRE,这可能会导致难以调试和理解它发生的原因。因此,为了记录这种看似奇怪的事件发生的可能方式。
这段代码foo == null 会以什么方式抛出NullReferenceException?
【问题讨论】:
-
foo的静态类型是否实现==操作符? -
如果您可以在调试器下重现异常,您只需将调试器配置为在第一次出现 NullReferenceException 异常时停止。这将允许您查看实际抛出异常的位置(包括 get-ter、重载运算符等)。
-
如果您想在检查实例是否为空时确保安全并忽略任何运算符覆盖,您可以执行
foo is null。这与调用ReferenceEquals(foo, null);相同。 -
“这个问题主要是为了探究原因……” -- Stack Overflow 不是“探究原因”的地方。此类问题过于宽泛,缺乏重点,在各种方面都达不到现场标准。事实是:您遇到了一个无法解释的异常,而解释它的唯一方法是提供引发异常的代码,您还没有这样做。 ...
-
@PeterDuniho:我编辑了我的问题,希望能让我的意图更清晰。据我了解,在 SO 上询问 X 可能发生的所有可能方式应该是可以的,尤其是当 X 是一件如此奇怪和罕见的事情时。同样,我已经修复了我自己的代码,这与它无关。当我用谷歌搜索它时,它只是被它和缺乏关于这个主题的任何有用链接所激发。我只是想让未来的人们更容易调试并理解为什么他们的空检查会抛出 NRE。回答这样的编程问题不是很符合 SO 的精神吗?
标签: c# null nullreferenceexception