您不需要“不良”异常的列表,您应该默认将所有情况视为不良。只捕获您可以处理并从中恢复的内容。 CLRcan http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx notify http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx未处理的异常,以便您可以适当地记录它们。吞并除黑名单异常之外的所有内容并不是修复错误的正确方法。那只会掩盖他们。读this http://msdn.microsoft.com/en-us/library/seyhszts.aspx and this http://msdn.microsoft.com/en-us/library/2w8f0bss.aspx.
出于目的进行捕获时不排除任何特殊例外
转移异常。
无需在 catch 子句中创建特殊异常列表,
你应该只捕获那些你可以合法捕获的异常
处理。您无法处理的异常不应被视为
非特定异常处理程序中的特殊情况。这
以下代码示例演示了对特殊情况的错误测试
异常以重新抛出它们。
public class BadExceptionHandlingExample2 {
public void DoWork() {
// Do some work that might throw exceptions.
}
public void MethodWithBadHandler() {
try {
DoWork();
} catch (Exception e) {
if (e is StackOverflowException ||
e is OutOfMemoryException)
throw;
// Handle the exception and
// continue executing.
}
}
}
其他一些规则:
通过捕获非特定异常来避免处理错误,例如
应用程序中的 System.Exception、System.SystemException 等
代码。在某些情况下,处理应用程序中的错误是
可以接受,但这种情况很少见。
应用程序不应处理可能导致的异常
意外或可利用的状态。如果你无法预测所有可能
异常原因并确保恶意代码无法利用
结果应用程序状态,您应该允许应用程序
终止而不是处理异常。
当您了解原因后,请考虑捕获特定的异常
将被抛出在给定的上下文中。
您应该只捕获那些可以恢复的异常。为了
例如,由于尝试打开而导致的 FileNotFoundException
一个不存在的文件可以由应用程序处理,因为它可以
将问题传达给用户并允许用户指定
不同的文件名或创建文件。打开文件的请求
生成 ExecutionEngineException 不应被处理,因为
无法在任何程度上了解异常的根本原因
确定性,并且应用程序无法确保安全
继续执行。
埃里克·利珀特 http://blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx将所有异常分为 4 组:致命的、“愚蠢的”、令人烦恼的、外源性的。以下是我对埃里克建议的解读:
Exc. type | What to do | Example
------------|-------------------------------------|-------------------
Fatal | nothing, let CLR handle it | OutOfMemoryException
------------|-------------------------------------|-------------------
Boneheaded | fix the bug that caused exception | ArgumentNullException
------------|-------------------------------------|-------------------
Vexing | fix the bug that caused exception | FormatException from
| (by catching exception because | Guid constructor
| the framework provides no other way | (fixed in .NET 4.0
| way of handling). Open MS Connect | by Guid.TryParse)
| issue. |
------------|-------------------------------------|-------------------
Exogenous | handle exception programmatically | FileNotFoundException
这大致相当于微软的 https://rads.stackoverflow.com/amzn/click/com/0321545613分类:使用情况、程序错误和系统故障。
您还可以使用静态分析工具,例如FxCop https://stackoverflow.com/questions/2740738/fxcop-for-net-4-0实施some http://blogs.msdn.com/b/codeanalysis/archive/2006/06/14/faq_3a00_-why-does-fxcop-warn-against-catch_2800_exception_29003f00_-_2d00_-part-1-_5b00_nick-guerrera_5d00_.aspx这些规则。