Dan*_*nov 9 .net c# visual-studio-2008 visual-studio
考虑下面的控制台应用程序,其特色是具有捕获类型异常的通用catch处理程序的方法TException.
当使用"调试"配置构建此控制台应用程序并在Visual Studio调试器下执行时(即通过*.vshost.exe),这在Visual Studio 2005和Visual Studio 2008中都会失败.
我相信这个问题只是在我安装Visual Stuido 2008之后才出现的.
using System;
class Program
{
static void Main()
{
Console.WriteLine(Environment.Version);
CatchAnException<TestException>();
Console.ReadKey();
}
private static void CatchAnException<TException>()
where TException : Exception
{
Console.WriteLine("Trying to catch a <{0}>...", typeof(TException).Name);
try
{
throw new TestException();
}
catch (TException ex)
{
Console.WriteLine("*** PASS! ***");
}
catch (Exception ex)
{
Console.WriteLine("Caught <{0}> in 'catch (Exception ex)' handler.", ex.GetType().Name);
Console.WriteLine("*** FAIL! ***");
}
Console.WriteLine();
}
}
internal class TestException : Exception
{
}
Run Code Online (Sandbox Code Playgroud)
在以下情况下,代码按预期运行:
System.Diagnostics.Debugger.Launch();第1行来附加调试器Main()仍然成功.从Visual Studio(2005或2008)中启动控制台应用程序,因此在ConsoleApplication.vshost.exe下执行时,它将失败.
这是我失败案例的输出
2.0.50727.3068
Trying to catch a <TestException>...
*** FAIL! ***
Caught <TestException> in 'catch (Exception ex)' handler.
Expected: <TestException>
Actual: <TestException>
Result of typeof(TException) == ex.GetType() is True
Run Code Online (Sandbox Code Playgroud)
造成这种特殊故障的原因是什么?
| 归档时间: |
|
| 查看次数: |
963 次 |
| 最近记录: |