gpt4 book ai didi

c# - "Object reference not set to an instance of an object": why can't . NET 显示更多细节?

转载 作者:可可西里 更新时间:2023-11-01 07:47:19 24 4
gpt4 key购买 nike

对象引用未设置到对象的实例

为什么异常不显示对象引用字段的名称,或者至少不显示它的类型?

这可能是 .NET 中最常见的运行时错误之一。尽管 System.Exception 有堆栈跟踪,但没有其他有用的详细信息。

在一年的时间里,我花了几个小时筛选堆栈跟踪(通常是在我没有编写的代码中),希望有一个来自“.pdb”文件的行号,然后在代码中找到该行,甚至那么该行中的哪个引用为空通常并不明显。拥有引用字段的名称会非常方便。

如果 System.ArgumentNullException 实例可以显示方法参数的名称(“值不能为空。参数名称:”) ,那么 System.NullReferenceException 实例肯定可以包含空字段(或其包含集合)的名称。

最佳答案

ArgumentNullExceptionNullReferenceException 的区别在于 ArgumentNullException 总是像这样显式抛出:

if (parameter == null)
throw new ArgumentNullException("parameter");

快速查看 ILDASM 输出,局部变量确实存在于函数的 IL 中。但是,仍然没有 API 以编程方式检索这些名称。我的理解是它会相当复杂,因为您基本上需要构建一个解析树来表示具有作用域、变量、语句等的函数。

事实上,它不仅仅是可以抛出 NullReferenceException 的简单变量,而是函数调用、属性或表达式的结果。我可以很快变得非常复杂。

想象一下:

internalObject.OtherProperty = myObject.GetOtherObject().ThirdObject.SomeProperty == "value"
? myObject.OtherProperty
: myObject.GetSomethingElse();

那里有多个失败点,构建一个表示实际 null 的字符串可能很棘手。

关于c# - "Object reference not set to an instance of an object": why can't . NET 显示更多细节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2918097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com