1

タイトルは少し誤解を招くかもしれませんが、問題は私には非常に簡単に思えます。try-catch-finallyブロックがあります。finallyブロックから例外がスローされた場合にのみ、ブロック内のコードを実行したいと思いtryます。現在のコードの構造は次のとおりです。

try
{
  //Do some stuff
}
catch (Exception ex)
{
  //Handle the exception
}
finally
{
  //execute the code only if exception was thrown.
}

今のところ、私が考えることができる唯一の解決策は、次のようなフラグを設定することです。

try
{
  bool IsExceptionThrown = false;
  //Do some stuff
}
catch (Exception ex)
{
  IsExceptionThrown = true;
  //Handle the exception   
}
finally
{
if (IsExceptionThrown == true)
  {
  //execute the code only if exception was thrown.
  }
}

これに何か悪いことがあるわけではありませんが、スローされた例外があるかどうかを確認するための別の(より良い)アプローチがあるかどうか疑問に思いますか?

4

4 に答える 4

12

次のようなものはどうですか?

try
{
    // Do some stuff
}
catch (Exception ex)
{
    // Handle the exception
    // Execute the code only if exception was thrown.
}
finally
{
    // This code will always be executed
}

それがCatchブロックの目的です!

于 2013-03-06T08:55:59.933 に答える
4

これには使用しないでくださいfinallyこれは、常に実行する必要のあるコードを対象としています。

いつ実行するかという点で、正確には何が違いますか

//Handle the exception

//execute the code only if exception was thrown.

何も見えません。

于 2013-03-06T08:55:58.587 に答える
2

finally結局のところ、あなたは必要ありません:

try
{
  //Do some stuff
}
catch (Exception ex)
{
  //Handle the exception
  //execute the code only if exception was thrown.
}
于 2013-03-06T08:56:53.130 に答える
0

Try / CatchステートメントのFinally部分は、例外が見つかったかどうかに関係なく、常に起動されます。このシナリオでは使用しないことをお勧めします。

try
{
  // Perform Task
}
catch (Exception x)
{
  //Handle the exception error.

}
Finally
{
  // Will Always Execute.
}
于 2013-03-06T08:56:13.600 に答える