为什么在Visual Studio调试时,Activator.CreateInstance没有传递构造函数异常?

3
我正在使用Activator.CreateInstance来实例化一个对象,如果对象的构造函数抛出异常,即使我在对Activator.CreateInstance的调用中使用了try/catch,Visual Studio似乎仍然将异常视为“用户未处理”的异常。请参见以下示例:
    class NumberDisliker
    {
        public NumberDisliker(int number)
        {
            throw new Exception(string.Format("{0}? I dislike {0}.", number));
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var blah = new NumberDisliker(5);
            }
            catch
            {
                Console.WriteLine("Caught using 'new'.");
            }

            try
            {
                var blah = Activator.CreateInstance(typeof(NumberDisliker), 5);
            }
            catch
            {
                Console.WriteLine("Caught using Activator.CreateInstance");
            }
            Console.ReadKey();
        }

当从Visual Studio中以调试模式运行时,构造函数抛出异常时执行会停止。但是,如果我直接运行可执行文件(不在Visual Studio中),则输出两个WriteLine消息而不会停止执行。我的最佳猜测是Visual Studio无法确定该异常是否已处理,但我不确定原因。
附注:如果我选择在异常助手停止执行后“继续”执行,则程序将以预期的输出完成。

这可能与您在菜单中的设置有关:调试 > 异常 - oleksii
我尝试了Eoin Campbell答案中提到的设置,但似乎并没有影响到这种行为。 - rom99
2个回答

4

这听起来很有前途,但该选项似乎默认未被选中。无论我是否勾选它,我都看到相同的行为。 - rom99

0

请检查 设置调试 > 异常,您可以设置哪些异常会中断执行


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接