c# - 无法从 Activator.CreateInstance 捕获异常

标签 c# .net exception-handling activator

好吧,我承认这段代码对你来说看起来很奇怪,那是因为它很奇怪。这只是重现行为的代码,而不是我想要使用的代码。

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Activator.CreateInstance(typeof(Func<int>), new object[] { new object(), IntPtr.Zero });
        }
        catch
        {
            Console.WriteLine("This won't print!");
        }

        Console.Write("Actually this will not print either!");
        Console.ReadLine();
    }
}

无论我 try catch 什么异常类型(据我所知,实际抛出的异常是 ArgumentException),catch block 中的代码都不会执行。实际上执行只会在 Activator.CreateInstance 行停止。

最佳答案

您已经用该代码轰炸了 CLR。感人的。实际的事故是垃圾收集堆的损坏,它是用 ExecutionEngineException 发出信号的。显然,损坏程度足以阻止 CLR 执行异常处理程序。

您可以在 connect.microsoft.com 上报告此问题。但是,该错误在 .NET 4.0 中已修复,它会生成正确的异常 ArgumentNullException,“值不能为 null,参数名称:方​​法”。解决方法很明显,不要在需要非空字符串时传递 IntPtr.Zero。

关于c# - 无法从 Activator.CreateInstance 捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2803262/

相关文章:

c# - 如何修复 WCF "Requested Upgrade is not supported by net.tcp"错误?

.NET Core 3.1 Web API和Blazor服务器端JWT身份验证

function - 无法在 map 函数中捕获异常

c# - REGEX - 无法掌握基础知识

c# - 3n+1 给出负数

c# - FBRemoteEvent 使应用程序崩溃

c# - 列表列表的交集

c# - 连续打字时不要引发 TextChanged

linux 内核模块中的 C++ 异常支持

java - 异常处理无法访问的代码