当前位置:  开发笔记 > 编程语言 > 正文

为什么空引用异常不能命名具有空引用的对象?

如何解决《为什么空引用异常不能命名具有空引用的对象?》经验,为你挑选了1个好方法。

在我看来,我的很多调试时间花在追踪复杂语句中的空引用异常上.例如:

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.

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



1> Mehrdad Afsh..:

例外是运行时事物,变量是编译时间的东西.

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

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

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


行号也是运行时的事情.调试时编译包含各种编译时的事物(类和方法名称,行号等)为什么不是变量名?
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有