2017-02-09 50 views
-2

如何跳过C#中的finally块?在哪些情况下,C#中不会执行finally块?

是否有可能跳过'finally'块,即使它出现在try和catch块之后。

+0

通过使用'goto'语句可以有效地跳过它。 – STLDeveloper

+3

你为什么想要?还是你有一种最终黑色似乎被跳过的情况?你有代码示例吗? – SQB

+1

有一些灾难性的故障和本地异常,不会导致finally代码块不会被执行。只是为了说明这一点:不要在程序中将它用于控制流。 **为什么**你需要跳过finally块,为什么不直接设置一个表示它是否应该被执行的布尔值? –

回答

3

我能想到的唯一的办法是一个标志:

bool skipFinally = false; 

try 
{ 
    DoSomething(); 
    skipFinally = true; 
    DoSomethingElse(); 
} 
finally 
{ 
    if (!skipFinally) 
     DoFinallyStuff(); 
} 

所以finally块字面上得到执行,但你可以决定什么要做。


但它有一个设计缺陷的气味。为什么在finally块中有可能不应该首先执行的代码?但另一方面:C#编译器为迭代器块生成类似上面的代码。

相关问题