如果一个对象初始化为null,则为
not possible to get the type information,因为引用不指向任何内容.
但是,当我调试并且我将鼠标悬停在一个变量上时,它显示类型信息.只显示静态方法,但是似乎知道类型.即使在发布版本.
调试器是否使用其他信息,而不仅仅是反映某种类型来查找数据类型?怎么比我更了解它?如果知道这个,为什么不能showing the datatype in a NullReferenceException
?
解决方法
看起来你将引用的类型与它指向的值的类型混淆.引用的类型嵌入到DLL元数据中,并且可以由调试器轻松访问.还有相关PDB中存储的临时信息,调试器利用这些信息来提供更好的体验.因此,即使对于空引用,调试器也可以确定类型和名称等信息.
至于NullReferenceException.它也可以告诉你它正在查询字段/方法的类型…可能.我对CLR这部分的内部不熟悉,但似乎并不是一个固有的原因,为什么它不能这样做.
但是我不知道CLR的附加成本是值得的.我分享了一个对于空参考异常信息缺乏的沮丧.但是涉及的类型多于我想要的名字!我不在乎它是一个IComparable,我想知道它是leftCustomer.
名称是CLR并不总是有权访问它们的一部分,他们生活在PDB而不是元数据.因此,它不能为他们提供很高的可靠性(或速度)