.net 4控制台应用示例
当我在vs 2010中运行时,它似乎继续投掷(从捕获)并且永远不会到达终点。它打破了抛出并显示异常,我点击f5并且它几乎像它在抛出时的循环一样重新抛出。在另一个exe中使用类似的代码我能够将异常抛出到控制台并执行finally来清理。事实并非如此,我想知道为什么。
static void Main(string[] args)
{
try
{
throw new Exception("Exception");
}
catch(Exception)
{
Console.WriteLine("Catch");
throw;
}
finally
{
Console.WriteLine("Finally");
}
}
答案 0 :(得分:10)
相反,它确实执行finally
块。这是输出:
Catch
Unhandled Exception: System.Exception: Exception at ConsoleApplication1.Program.Main(String[] args) in C:\Desktop\ConsoleApplication1\Program.cs:line 24
Finally
答案 1 :(得分:2)
我敢打赌,终于实际执行了,但是在控制台应用程序的Main方法中,最后控制台对象不再可用。
答案 2 :(得分:2)
如果我通过调试启动程序,代码将停止并显示消息“未处理的异常”,这是在最终执行之前。不经调试运行将按预期工作(CTRL-F5)。
使用调试器,您可以通过在另一个try-catch块中移动测试代码来验证最终执行的内容,例如:
static void Main(string[] args)
{
try
{
Method();
}
catch (Exception)
{
Console.WriteLine("caught in main");
}
Console.ReadKey();
}
public static void Method()
{
try
{
throw new Exception("Exception");
}
catch (Exception)
{
Console.WriteLine("Catch");
throw;
}
finally
{
Console.WriteLine("Finally");
}
}
答案 3 :(得分:0)
你可以保证它确实在执行,就像@David Heffernan用他的输出所证明的那样;但是,您可能会考虑C#规范(8.10)中的内容,以确信应该是:
finally块的语句总是在控制时执行 留下一个尝试声明。无论控制转移都是如此 作为执行a的结果,由于正常执行而发生 中断,继续,转到或返回语句,或者作为结果 从try语句中传播异常。