在我看来,我的很多调试时间花在追查复杂语句中的空引用异常上。例如:为什么空引用异常不能指定具有空引用的对象?
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.
这是严格意义上的设计选择,旨在保护匿名的代码或有没有一个比较编译器设计中的消极原因是不将此信息包含在调试时异常中?
行号也是一个运行时间的事情。调试时编译包含各种编译时间事件(类和方法名称,行号等)为什么不包含变量名称? – 2009-02-23 18:36:03
IL级别实际上存在类和方法和参数名称。但是生成的IL中变量几乎没有了。基本上,没有具体的方法将异常与特定变量联系起来:假设“if(a 2009-02-23 18:44:42
由于上面的评论而被接受。 – 2009-02-23 19:01:11