特定のメソッドを呼び出して何らかの作業を行いたいだけで、スローされる可能性のある特定の例外をすべて処理する必要がない特定のシナリオがあります。代わりに、私が本当に気にしているのは、メソッドが成功したかどうかだけです。
.NET / C# の例を提供します。コピーしたいファイルがあり、本当に気にしているのはコピー操作が成功したかどうかだけだとしましょう。コピーが失敗した場合、特定の例外が FileNotFoundException または IOException の「十分なディスク容量がありません」例外であるかどうかは気にしません...この操作は重要ではないため、その場合、アプリケーションは通常どおりに続行します。
したがって、これを実装する方法は次のとおりです。
try
{
// try
System.IO.File.Copy(strFile, strFile + ".new");
}
catch (Exception ex)
{
// if critical exception then rethrow
if (IsCritical(ex))
throw;
// else just log and swallow...
Console.WriteLine("Failed to copy the file: " + ex.Message);
}
ここで IsCritical(Exception ex) は次のように定義されたヘルパー メソッドです。
public static bool IsCritical(Exception ex)
{
if (ex is OutOfMemoryException) return true;
if (ex is AppDomainUnloadedException) return true;
if (ex is BadImageFormatException) return true;
if (ex is CannotUnloadAppDomainException) return true;
if (ex is ExecutionEngineException) return true;
if (ex is InvalidProgramException) return true;
if (ex is System.Threading.ThreadAbortException)
return true;
return false;
}
この質問は次の記事に基づいています: 「処理できない例外をキャッチしない」ルールを念頭に置いた C# での例外処理
アイデアは、例外処理のベスト プラクティスの主なルールに従うことです。ログに記録し、アプリケーション ロジックを続行します)。
それで、これは与えられたシナリオにとって良いアプローチですか?そうでない場合、なぜ、そして何をするのがより良いでしょうか?