代码之家  ›  专栏  ›  技术社区  ›  Patrik Hägne

无法从Activator.CreateInstance捕获异常

  •  7
  • Patrik Hägne  · 技术社区  · 15 年前

    很奇怪 . 这只是复制行为的代码,而不是我想要使用的代码。

    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();
        }
    }
    

    无论我试图捕获什么样的异常类型(据我所知,实际抛出的异常是ArgumentException),catch块中的代码都不会执行。实际上,执行将在Activator.CreateInstance行停止。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Hans Passant    15 年前

    你用那代码把CLR搞砸了。令人印象深刻。实际的灾难是垃圾收集堆的损坏,它用ExecutionEngineeException发出信号。显然,这种破坏已经足够大,足以阻止CLR执行异常处理程序。

        2
  •  1
  •   ChaosPandion    15 年前

    在.NET3.5中运行此代码时 ExecutionEngineException . 当运行时抛出此异常时,它类似于调用 Environment.FailFast . 显然这是堆内存损坏的症状。

    当我将您的示例代码切换到以下代码时,就实现了正确的行为。

    Activator.CreateInstance(
        typeof(Func<int>), 
        new object[] { IntPtr.Zero, new object() }
    );
    

    推荐文章