在我看来,我的许多调试时间都花在了查找复杂语句中的空引用异常上。例如:

For Each game As IHomeGame in _GamesToOpen.GetIterator()


为什么当我得到NullReferenceException时,可以获取堆栈跟踪中的行号,而不获取等于null的对象的名称。换句话说,为什么:

Object reference not set to an instance of an object.


代替

_GamesToOpen is not set to an instance of an object.


要么

Anonymous object returned by _GamesToOpen.GetIterator() is null.


要么

game was set to null.


这是严格的设计选择,是为了保护代码的匿名性,还是在编译器设计中有充分的理由不在调试时异常中包含此信息?

最佳答案

异常是运行时事物,变量是编译时事物。

实际上,示例中的变量是一个表达式。表达式并不总是简单的变量。在运行时,将对表达式求值,并在结果对象上调用该方法。如果该表达式的值为null,则运行时将抛出NullReferenceException。假设以下内容:

Dim a as New MyObject
Dim b as String = MyObject.GetNullValue().ToString()


如果GetNullValue()方法返回null,运行时应返回什么错误消息?

关于.net - 为什么不能将空引用异常命名为具有空引用的对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/578734/

10-11 12:17