我知道有一些异常类型无法在catch块中捕获,比如.NET 2.0中的StackOverflowException。我想知道哪些其他异常不建议捕获或与不良实践相关联。
我希望使用此异常类型列表,在每次使用catch块中的Exception时进行检查:
这个问题的灵感来自于以下内容: 在 System.Data.Entity, Version=3.5.0.0 中的 System.Data.EntityUtil.IsCatchableExceptionType(Exception)。
我希望使用此异常类型列表,在每次使用catch块中的Exception时进行检查:
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;
}
}
编辑
我觉得我没有提供一个很好的例子。试图在沟通自己的意思时让例子变得琐碎是其中的一个问题。
我从不自己抛出异常,我总是捕获特定的异常,只有在以下情况下才捕获异常:
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.Entity, Version=3.5.0.0 中的 System.Data.EntityUtil.IsCatchableExceptionType(Exception)。