最初の例では、例外を再スローしても、finally内のコードは引き続き実行されます。これは、2番目の例では不可能です。
例外を再スローしないことを選択した場合、はい、ほとんど違いはありません。ただし、これは不正な形式と見なされます。明示的に処理できない例外を消費する必要がある場合はめったにありません。
これは、コードの実行フローを支援するためのキーワードです。例外をスローすると、コードの実行フローが影響を受けます(を使用するなどreturn
)。このfinally
キーワードを使用すると、例外が発生した場合(またはreturn
からのtry
場合)に、実行が終了するときに何かを実行する必要があることを表現できます。
質問に正面から答えるには、必要なときではなく、必要なときに必要です。
参考文献
安全のため、このキーワードの使用を開始する前に、そのドキュメントをお読みください。
http://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx
そして、一般的な例外処理キーワード:
http://msdn.microsoft.com/en-us/library/s7fekhdy.aspx
例
例外をキャッチして何かを実行してから、再スローします。finally
整理されたコードを呼び出すために使用します。
try
{
OpenConnectionToDatabase();
// something likely to fail
}
catch (Exception ex)
{
Log(ex);
throw;
// throw ex; // also works but behaves differently
}
// Not specifying an exception parameter also works, but you don't get exception details.
//catch (Exception)
//{
// Log("Something went wrong);
// throw;
//}
finally
{
CloseConnectionToDatabase();
}
例外をキャッチすることに関心を持たないでください。ただし、finally
コードを整理するために使用してください。
try
{
OpenConnectionToDatabase();
// something likely to fail
}
finally
{
CloseConnectionToDatabase();
}
try
見栄えが良いので、から戻ってください。ただし、finally
コードを整理するために使用します。
try
{
OpenConnectionToDatabase();
return 42;
}
finally
{
CloseConnectionToDatabase();
}