- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的 .NET 应用程序因 NullReferenceException 而崩溃。有趣的是日志显示了这个:
Inner Exception System.NullReferenceException: Object reference not set to an instance of an object.
at System.Object.GetType()
令我困惑的是,异常发生在 GetType 内部,而不是在调用 GetType 的那一行。我测试了以下情况。
如果我在一个空对象上调用 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,如果您能提供概念验证代码,我将永远感激不已。感谢您的宝贵时间。
最佳答案
一种方法是使用 call
调用 GetType
方法(“在”null
引用上)指令,而不是 C# 通常使用的 callvirt
指令。这将防止发生pre 方法调用运行时空值检查。取而代之的是,空引用将传递给该方法,从而导致异常在方法本身内部被抛出。
例如,使用 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 )
关于c# - System.Object.GetType 如何抛出 NullRefernceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424670/
我的 .NET 应用程序因 NullReferenceException 而崩溃。有趣的是日志显示了这个: Inner Exception System.NullReferenceException:
我是一名优秀的程序员,十分优秀!