我通常同意大多数代码分析警告,并且我会坚持遵守。但是,我在这方面遇到了困难:
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.
}
}
如果您在此处未捕获到一般异常,则必须捕获所有可能的异常类型。帕特里克(Patrick)有一个优点,OutOfMemoryException
不应以这种方式处理。那么,如果我想忽略所有例外情况OutOfMemoryException
呢?
OutOfMemoryError
is,正是Exception
由于这个原因,它与继承树是分开的
OutOfMemoryException
呢 处理代码与其他所有代码一样吗?