关于这个.NET未处理的异常消息:
你调用的对象是空的.
为什么.NET不显示哪个对象null?
我知道我可以检查null并解决错误.但是,为什么.NET没有帮助指出哪个对象具有空引用以及哪个表达式触发了NullReferenceException?
我确信我们在某个时间或某个时间都收到了非常模糊的"对象引用未设置为对象的实例"异常.识别出问题的对象通常是设置断点和检查每个语句中的所有成员的繁琐任务.
有没有人有任何技巧可以通过编程手段或其他方式轻松有效地识别导致异常的对象?
- 编辑
看起来我像模样异常=).关键是_不必调试应用程序以找到错误的对象.编译器/运行时确实知道该对象已被分配/声明,并且该对象尚未被实例化.有没有办法在捕获的异常中提取/识别这些细节
@ W. Craig Trader
您的解释是设计问题的结果可能是我能得到的最佳答案.我对防御性编码非常强迫,并且在经过一段时间修复我的习惯之后设法摆脱了大部分这些错误.其余的只是把我调整到最后,并引导我将这个问题发布给社区.
谢谢大家的建议.
在我看来,我的很多调试时间花在追踪复杂语句中的空引用异常上.例如:
For Each game As IHomeGame in _GamesToOpen.GetIterator()
Run Code Online (Sandbox Code Playgroud)
为什么,当我得到NullReferenceException时,我可以获取堆栈跟踪中的行号,但不能获取等于null的对象的名称.换句话说,为什么:
Object reference not set to an instance of an object.
Run Code Online (Sandbox Code Playgroud)
代替
_GamesToOpen is not set to an instance of an object.
Run Code Online (Sandbox Code Playgroud)
要么
Anonymous object returned by _GamesToOpen.GetIterator() is null.
Run Code Online (Sandbox Code Playgroud)
要么
game was set to null.
Run Code Online (Sandbox Code Playgroud)
这是一个严格的设计选择,是为了保护代码的匿名性,还是编译器设计中有一个令人信服的理由不在调试时异常中包含这些信息?