无法从Activator.CreateInstance中捕获异常

Pat*_*gne 7 .net c# 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

无论我尝试捕获什么异常类型(据我所知抛出的实际异常是ArgumentException),catch块内的代码将不会执行.实际执行只会停在Activator.CreateInstance行.

Han*_*ant 4

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

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