2017-02-09 5 views
-2

最終的にC#でブロックをスキップする方法は?finallyブロックがC#で実行されない状況はありますか?

tryとAnd catchブロックの後に存在していても 'finally'ブロックをスキップすることは可能ですか?

+0

'goto'ステートメントを使って効果的にスキップすることができます。 – STLDeveloper

+3

なぜあなたはしたいですか?それとも、最終的に黒がスキップされたような状況がありますか?コード例がありますか? – SQB

+1

最終的なブロックが実行されない原因となる可能性のある致命的な障害とネイティブの例外があります。明白なことを述べるだけです:あなたのプログラムで制御フローのためにこれを使わないでください。 **なぜ** finallyブロックをスキップする必要がありますか?実行する必要があるかどうかを示すブール値をどこかに設定するのはなぜですか? –

答えて

3

私は考えることができる唯一の方法は、フラグです:

bool skipFinally = false; 

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

のでfinallyブロックは、文字通り実行されますが、あなたはそこに何をすべきかを決定することができます。


しかし、デザイン上の瑕疵があります。なぜブロックfinallyのコードが最初に実行されるべきではないのでしょうか?
しかし、C#コンパイラはイテレータブロックに対して上記のようなコードを生成します。

関連する問題