gpt4 book ai didi

c# - System.Object.GetType 如何抛出 NullRefernceException

转载 作者:太空狗 更新时间:2023-10-29 23:33:34 25 4
gpt4 key购买 nike

我的 .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/

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