我有.NET应用程序,崩溃了NullReferenceException。有趣的是,日志显示了这一点:
Inner Exception System.NullReferenceException: Object reference not set to an instance of an object.
at System.Object.GetType()
令我感到困惑的是,该异常发生在GetType内部,而不是在调用GetType的行上。我已经测试了以下情况。
如果我在一个null对象上调用GetType,则异常发生在调用GetType的行上,而不是在GetType内。
我也尝试过How can I get a NullReferenceException in this code sample?但很奇怪
我在Program.Main中得到了异常,而不是在Object.GetType中(尽管在那篇文章中它在GetType中)。
我还尝试同时创建对象和调用GetType,但是很客气地说,
创建.net对象时没有窗口,其中GetType抛出NullReferenceException。
现在,我唯一想到的是这可能是某些较旧的.NET实现的行为。
因此,无论如何在GetType中引起NullReferenceException的任何想法,如果您能提供概念证明代码,我将万分感激。
感谢您的时间。
最佳答案
一种方法是使用 GetType
指令而不是C#通常使用的null
指令调用call
方法(在callvirt
-reference上)。这将防止发生方法前调用运行时空检查。相反,会将空引用传递给该方法,从而将异常引发到方法本身内部。
例如,使用InvokeNonVirtual
示例provided here,您可以执行以下操作:
var method = typeof(object).GetMethod("GetType");
object[] args = { null };
InvokeNonVirtual(method, args);
这将生成一个
TargetInvocationException
,其中InnerException
是具有堆栈跟踪的NullReferenceException
:at System.Object.GetType()
at NonVirtualInvoker(Object )