【发布时间】:2018-02-26 06:25:32
【问题描述】:
我在 C# 中有一个简单的 try-catch-finally 块。据我了解,“finally”块很有用,因为即使在 catch 块内抛出异常(除了一些特殊的异常类型),它的代码也会执行。
但是,在下面的简单示例中,finally 块永远不会执行。 Visual Studio 说我的 catch 块中发生了未处理的异常,然后程序终止。我认为执行只会跳转到 finally 块。
即使在 catch 块中发生异常,如何确保 finally 块中的代码执行?
public static void Main(string[] args)
{
try
{
throw new Exception("Apple");
}
catch (Exception ex)
{
throw new Exception("Banana");
}
finally
{
// This line never executes. Why?
Console.WriteLine("Carrot");
}
}
【问题讨论】:
-
Visual Studio 通常会因异常而中断,然后您可以继续应用程序,只需再次按下小播放按钮即可。然后它实际上应该向您显示输出。
-
顺序是: 1. 异常Apple被创建。 2、瞬间跳入下一个catch块(合身型)。 3. 异常 Banana 被创建。 4. finally 块运行。 5. 即时跳转到下一个 try/catch 块。 6. 所有 .NET 程序都隐含地包裹着一个 try...catch(Exception),唯一的操作是“通过对话框将其公开给用户”,然后只是关闭程序。在您的情况下,这是“下一个订单” Catchblock 将用于处理 Banana。
-
@PeterDuniho:只有最后一个副本可以解释这种行为——但它仍然没有。没有一个答案指出结果取决于用户操作。
标签: c# exception try-catch finally unhandled