try {
if (isFileDownloaded)
//do stuff
else
throw new CustomException()
}
catch (Exception e)
{
// something went wrong save error to log
}
finally
{
//release resources
}
私の質問は、catch
がtryブロックでスローされたApplicationException
をキャッチすることですか?それは貧弱なコーディングスタイルですか?別の方法で書く必要がありますか?
catch
は例外(およびその他の発生するもの)をキャッチします。そうは言っても、私は可能な限りこのようなコードを書かないようにしています。
個人的には、同じスコープでスローされた例外の例外処理(キャッチ)を行う理由はほとんどありません。メソッドでエラーを処理できる場合-例外処理(つまり、ロギング)をtryブロックにも直接配置します。
catch
ブロック内のメソッドによってスローされた例外をキャッチするには、try
を使用する方がIMOより便利です。これは、たとえば、// do stuff
セクションで、例外を発生させるメソッドが呼び出されました。
また、すべての例外をキャッチしないことをお勧めします(Exception e
)ではなく、正しく処理できる特定のタイプの例外。これに対する1つの例外は、キャッチ内で例外を再スローする場合です。つまり、ロギングの目的で例外を使用しているが、それでもコールスタックを泡立たせる場合です。
はい、ApplicationException
から派生したException
をキャッチします。
ほとんどの場合、ベース例外の処理は問題ありませんログに記録するか、別のタイプの例外で何かを行う必要がある場合を除く ...
try{
if (isFileDownloaded)
//do stuff
else
throw new ApplicationException();
}
catch(ApplicationException ae)
{
// log it application exception here...
}
catch(Exception ex)
{
// log all other exceptions here...
}
finally
{
// release resources...
}
また、参考までに、.NET 2.0以降、派生元の例外として ApplicationException
は廃止されました。それ自体がスローする例外として意図されていなかったため、おそらくまったく使用しないでください。
はい、キャッチはApplicationExceptionをキャッチし、はい、コーディングスタイルは貧弱です。一般的なルールとしては、特定の例外と、アプリケーションの状態の修正など、何かを行う予定の例外のみをキャッチします。