1

私は多くの場所でそのようなコードを見てきました.これの利点はありますか..またはこれは間違った慣行です..

try
{
    ......
}   
catch (NullReferenceException ex)
{
    Data.LogError(ex, "Exception occourred while ...");
}
catch (IndexOutOfRangeException ex)
{
    Data.LogError(ex, "Exception occourred while ...");
}
catch (Exception ex)
{
    Data.LogError(ex, "Exception occourred while ...");
}

特定の例外処理のコンテキストで。

4

3 に答える 3

4

catch ブロックで例外を別の方法で処理する場合 (つまり、スローされた例外の結果として別のアクションを実行する場合) には利点があります。

それ以外の場合は、より具体的な例外ハンドラーを削除して、最も一般的なものを使用できます。

catch(Exception ex)

注: 例外が純粋にログ記録に使用されている場合は、例外を再スローしてアプリケーションの残りの部分にバブル アップさせると便利な場合があります。

try{

}
catch(Exception ex){
   // Log exception here
   throw;
}
于 2013-05-30T09:58:59.430 に答える
2

catchこれは、特定のタイプの例外をどう処理するかを選択できるため、ジェネリックよりもさらに優れています。たとえば、ファイルが存在しない場合はメッセージを表示し、再試行することを申し出て、それ以外の場合はアプリケーションを強制終了するとします。

例外は異なるプロパティを提供するため、例外を別の方法で処理することもできます (指摘してくれた Rots に感謝します)。

try
{
}
catch(FileNotFoundException ex)
{
    Console.WriteLine(ex.FileName + " not found");
    //Retry
}
catch(Exception ex) // Exception does not contain ex.FileName
{
    //Save stuff
    //Exit
}

最初に一致したブロックのみが実行されます。

于 2013-05-30T10:00:05.900 に答える
0

特定の例外を独自の方法で処理/ログに記録する場合は、指定されたアプローチが最適です。また、一般的なメッセージを提供するよりも適切な詳細をユーザーに通知できるシナリオに最適です。ここで、異なる例外を処理したくない場合は、すべての例外をキャッチする 1 つの catch ブロックを使用できます。

于 2013-05-30T10:05:16.023 に答える