-2
最終的にC#でブロックをスキップする方法は?finallyブロックがC#で実行されない状況はありますか?
tryとAnd catchブロックの後に存在していても 'finally'ブロックをスキップすることは可能ですか?
最終的にC#でブロックをスキップする方法は?finallyブロックがC#で実行されない状況はありますか?
tryとAnd catchブロックの後に存在していても 'finally'ブロックをスキップすることは可能ですか?
私は考えることができる唯一の方法は、フラグです:
bool skipFinally = false;
try
{
DoSomething();
skipFinally = true;
DoSomethingElse();
}
finally
{
if (!skipFinally)
DoFinallyStuff();
}
のでfinally
ブロックは、文字通り実行されますが、あなたはそこに何をすべきかを決定することができます。
しかし、デザイン上の瑕疵があります。なぜブロックfinally
のコードが最初に実行されるべきではないのでしょうか?
しかし、C#コンパイラはイテレータブロックに対して上記のようなコードを生成します。
'goto'ステートメントを使って効果的にスキップすることができます。 – STLDeveloper
なぜあなたはしたいですか?それとも、最終的に黒がスキップされたような状況がありますか?コード例がありますか? – SQB
最終的なブロックが実行されない原因となる可能性のある致命的な障害とネイティブの例外があります。明白なことを述べるだけです:あなたのプログラムで制御フローのためにこれを使わないでください。 **なぜ** finallyブロックをスキップする必要がありますか?実行する必要があるかどうかを示すブール値をどこかに設定するのはなぜですか? –