StackOverflowException
.NET 2.0のように、catch ブロックでキャッチできない例外の種類がいくつかあることは知っています。他のどの例外がキャッチすることをお勧めできないか、または悪い慣行に関連付けられているかを知りたいです。
この例外タイプのリストを使用したい方法はException
、catch ブロックで使用するたびにチェックすることです。
private static readonly Type[] _exceptionsToNotCatch = new Type[] { typeof(StackOverflowException) };
// This should never throw, but should not swallow exceptions that should never be handled.
public void TryPerformOperation()
{
try
{
this.SomeMethodThatMightThrow();
}
catch (Exception ex)
{
if (_exceptionsToNotCatch.Contains(ex.GetType()))
throw;
}
}
編集
私はあまり良い例を提供したとは思いません。これは、自分の意味を伝えようとするときに例を些細なものにしようとする際の問題の 1 つです。
私は自分で Exception をスローすることはなく、常に特定の例外をキャッチし、次のように Exception のみをキャッチします。
try
{
this.SomeMethodThatMightThrow();
}
catch (SomeException ex)
{
// This is safe to ignore.
}
catch (Exception ex)
{
// Could be some kind of system or framework exception, so don't handle.
throw;
}
私の質問は、より学術的なものとして意図されていました。システムによってのみスローされ、キャッチされるべきではない例外はどれですか? 次のような状況が心配です。
try
{
this.SomeMethodThatMightThrow();
}
catch (OutOfMemoryException ex)
{
// I would be crazy to handle this!
// What other exceptions should never be handled?
}
catch (Exception ex)
{
// Could be some kind of system or framework exception, so don't handle.
throw;
}
この質問は、System.Data.EntityUtil.IsCatchableExceptionType(Exception) in System.Data.Entity, Version=3.5.0.0 に本当に触発されました。