12
捕获一般异常真的是一件坏事吗?
我通常同意大多数代码分析警告,并且我会坚持遵守。但是,我在这方面遇到了困难: 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呢?
56
c#
design
exceptions