私は通常、ほとんどのコード分析の警告に同意し、それらを順守しようとします。しかし、私はこれで苦労しています:
CA1031:一般的な例外タイプをキャッチしない
このルールの根拠を理解しています。しかし、実際には、スローされた例外に関係なく同じアクションを実行したい場合、それぞれを具体的に処理するのはなぜですか?さらに、特定の例外を処理する場合、呼び出しているコードが変更されて将来新しい例外がスローされるとどうなりますか?次に、その新しい例外を処理するためにコードを変更する必要があります。一方、単にException
コードをキャッチしただけなら、変更する必要はありません。
たとえば、FooがBarを呼び出し、FooがBarによってスローされた例外のタイプに関係なく処理を停止する必要がある場合、キャッチしている例外のタイプを特定することに利点はありますか?
たぶんより良い例:
public void Foo()
{
// Some logic here.
LogUtility.Log("some message");
}
public static void Log()
{
try
{
// Actual logging here.
}
catch (Exception ex)
{
// Eat it. Logging failures shouldn't stop us from processing.
}
}
ここで一般的な例外をキャッチしない場合は、可能なあらゆる種類の例外をキャッチする必要があります。パトリックには、OutOfMemoryException
この方法で対処すべきでない良い点があります。では、例外をすべて無視したい場合はどうしOutOfMemoryException
ますか?
OutOfMemoryError
、まさにそのException
理由で継承ツリーとは別のものです
OutOfMemoryException
?他のすべてと同じ処理コード?