存在System.ArgumentException的Catch块,但无论如何都不会捕获异常,为什么?

jav*_*red 3 c#

我有这个代码:

       if (typeof(Enum).IsAssignableFrom(typeof(T)))
        {
            try
            {
                return (T)Enum.Parse(typeof(T), text);
            }
            catch (ArgumentException e)
            {
                return default(T);
            }
        }
Run Code Online (Sandbox Code Playgroud)

但是我收到了以下例外:

mscorlib.dll中出现'System.ArgumentException'类型的第一次机会异常附加信息:未找到请求值'ABC'

怎么可能?为什么catch块不工作?

Dar*_*rov 9

为什么捕获块不起作用?

catch块工作正常,只是你在Visual Studio调试器中看到它.这是第一次机会异常的意思.调试时,所有异常都显示在VS中,只是如果你有一个正确的catch子句,第一次机会异常可能会消失.顺便说一句,你可以配置VS不显示它们.

哦,只是旁注:在.NET 4.0中有Enum.TryParse方法,所以你甚至不需要trycatch在这个特定的片段中.