27
try { 
  if (isFileDownloaded)
   // do stuff
  else
   throw new CustomException()
} 
catch (Exception e)
{
  // something went wrong to save the error to log
}
finally
{
  //release resources
}

私の質問は、try ブロックでスローされたcatchキャッチですか? ApplicationExceptionコーディングスタイルが悪いですか?

それは別の方法で書かれるべきですか?

4

4 に答える 4

32

catch、例外 (およびその他の発生したもの) をキャッチします。そうは言っても、私は可能な限りこのようなコードを書かないようにしています。

個人的には、同じスコープでスローされた例外に対して例外処理 (キャッチ) を行う理由はほとんどないと思います。メソッドでエラーを処理できる場合は、例外処理 (つまり、ログ記録) も try ブロックに直接入れます。

ブロック内のメソッドによってスローされた例外をキャッチするには、IMOを使用するcatch方が便利です。tryこれは、たとえば、// do stuffセクションがたまたま例外を発生させたメソッドを呼び出した場合に、より役立ちます。

また、すべての例外 ( Exception e) をキャッチするのではなく、適切に処理できる特定の種類の例外をキャッチすることをお勧めします。これに対する 1 つの例外は、キャッチ内で例外を再スローする場合です。つまり、ロギング目的で使用しているが、コール スタックをバブルアップさせている場合です。

于 2010-07-20T19:37:24.150 に答える
12

ApplicationExceptionはい、から派生するのでキャッチしExceptionます。

ログに記録するか、別の種類の例外で何かを行う必要がない限り、ほとんどの場合、基本例外の処理は問題ありません...

try {
    if (isFileDownloaded)
       doSomeThings();
    else
       throw new ApplicationException("Something expectedly unexpected happened.");
}
catch(ApplicationException e)
{
   // log application exception here...
}
catch(Exception e)
{
   // log all other exceptions here...
}
finally
{
   // release resources...
}
于 2010-07-20T19:36:56.257 に答える
2

また、FYIは、ApplicationException派生元の例外として.NET2.0以降非推奨になっています。単独でスローすることは例外として意図されたものではなかったので、おそらくまったく使用しないでください。

于 2010-07-20T19:41:29.620 に答える
1

はい、キャッチは ApplicationException をキャッチします。はい、コーディング スタイルが悪いです。原則として、特定の例外と、アプリケーションの状態を修正するなど、何かを行う予定の例外のみをキャッチします。

于 2010-07-20T19:38:24.280 に答える