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

时间:2014-06-13 10:50:30

标签: c# .net visual-studio exception constructor

我使用Activator.CreateInstance来实例化一个对象,并且我发现如果对象的构造函数抛出一个异常,Visual Studio似乎将该异常视为"用户未处理& #34;即使我在try / catch中包含对Activator.CreateInstance的调用。请参阅以下示例:

    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无法确定是否处理了异常,但我不确定原因。

编辑:作为附录,如果我选择"继续"在异常助手停止后执行,程序以预期的输出结束。

2 个答案:

答案 0 :(得分:3)

在调试下查看visual studio选项页面。

http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k(VS.ToolsOptionsPages.Debugger.General)&rd=true

有一个名为

的选项

当异常跨越AppDomain或托管/本机边界时中断,这可以在使用反射调用时生效。 (上述链接中本节下的第3点)

答案 1 :(得分:0)

检查setting Debug > Exceptions,您可以在哪里设置哪些例外可以中断执行