C# catch块内部异常
可能重复:C# catch块内部异常,c#,C#,可能重复: 最终将在这个场景中执行(在C#)吗 是的,总是执行finally 演示行为的一个简单示例: private void Button_Click(object sender, EventArgs e) { try { ThrowingMethod(); } catch { } } private void ThrowingMethod() { try { throw new Inval
最终将在这个场景中执行(在C#)吗
是的,总是执行finally 演示行为的一个简单示例:
private void Button_Click(object sender, EventArgs e)
{
try
{
ThrowingMethod();
}
catch
{
}
}
private void ThrowingMethod()
{
try
{
throw new InvalidOperationException("some exception");
}
catch
{
throw;
}
finally
{
MessageBox.Show("finally");
}
}
对
你可以很容易地测试出来
但您提出这个问题的事实本身就是一个很好的论据,可以将其作为嵌套在try/finally中的try/catch块来编写。眼睛容易多了 (编辑:来自合并评论的澄清-谢谢大家)最后总是执行。我所知道的唯一例外是
- 你拔下电源插头
- 如果作为“后台”运行的线程由于其所属的主程序即将结束而终止,则该线程中的finally块将不会执行。看
- 其他异步异常,如堆栈溢出和内存不足。看
大多数未执行Finally的场景都与灾难性故障有关,但后台线程1除外,因此值得特别注意。请参阅此相关答案:“只有两个例外……”。还有其他的。例如Environment.FailFast.Thank Divo and Joe-我在那里学到了一些新东西。请参阅此副本(或链接到此处的其他副本之一):
private void Button_Click(object sender, EventArgs e)
{
try
{
ThrowingMethod();
}
catch
{
}
}
private void ThrowingMethod()
{
try
{
throw new InvalidOperationException("some exception");
}
catch
{
throw;
}
finally
{
MessageBox.Show("finally");
}
}