2017-02-09 84 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#編譯器爲迭代器塊生成類似上面的代碼。

相關問題