" 对象引用未设置为对象的实例 "
为什么异常不会显示对象引用字段的名称,或者至少显示其类型?
这可能是.NET中最常见的运行时错误之一.尽管System.Exception具有堆栈跟踪,但没有其他有用的详细信息.
在一年的过程中,我花了几个小时筛选堆栈跟踪(通常在我没写的代码中),希望有一个来自".pdb"文件的行号,然后在代码中查找行,即使这样,它也是通常不明显该线上的哪个引用为null.拥有参考字段的名称将非常方便.
如果System.ArgumentNullException实例可以显示方法参数的名称(" Value不能为null.参数名称:value "),那么System.NullReferenceException实例肯定可以包含null字段的名称(或其包含的集合).
之间的区别ArgumentNullException
,并NullReferenceException
是,ArgumentNullException
始终明确抛出像这样:
if (parameter == null)
throw new ArgumentNullException("parameter");
Run Code Online (Sandbox Code Playgroud)
快速查看ILDASM输出,局部变量确实存在于函数的IL中.但是,仍然没有API以编程方式检索这些名称.我的理解是它会相当复杂,因为你基本上需要构建一个解析树来表示一个带有范围,变量,语句等的函数.
更复杂的是,它不仅仅是可以抛出的简单变量NullReferenceException
,而是函数调用,属性或表达式的结果.我可以很快地变得非常复杂.
想象一下:
internalObject.OtherProperty = myObject.GetOtherObject().ThirdObject.SomeProperty == "value"
? myObject.OtherProperty
: myObject.GetSomethingElse();
Run Code Online (Sandbox Code Playgroud)
那里有多个失败点,并建立一个表示实际上null
可能很棘手的字符串.
归档时间: |
|
查看次数: |
5744 次 |
最近记录: |