注释
此内容由 Pearson Education, Inc. 的许可从 框架设计指南:可重用 .NET 库的约定、习惯和模式(第 2 版)重新打印。 该版于2008年出版,此后该书已于 第三版全面修订。 此页上的一些信息可能已过期。
本部分介绍框架提供的标准异常及其用法的详细信息。 该列表绝不是详尽的。 有关其他框架异常类型的用法,请参阅 .NET Framework 参考文档。
异常和 SystemException
❌ 请勿引发 System.Exception 或 System.SystemException。
❌ 请勿在框架代码中捕获 System.Exception
或 System.SystemException
,除非你打算重新引发。
❌ 除了在顶级异常处理程序中之外,避免捕获 System.Exception
或 System.SystemException
。
ApplicationException
❌ 请勿引发或派生自 ApplicationException。
InvalidOperationException
✔️ 如果对象处于不适当的状态,请务必引发 InvalidOperationException。
ArgumentException、System.argumentnullexception 和 ArgumentOutOfRangeException
✔️ 如果传递给成员的参数错误,则应抛出 ArgumentException 或其子类型之一。 如果适用,最好使用派生程度最高的异常类型。
✔️ 当抛出ParamName
的其中一个子类时,请设置该属性ArgumentException
。
此属性表示导致引发异常的参数的名称。 请注意,可以使用构造函数重载之一设置属性。
✔️ 请务必使用 value
作为属性资源库的隐式值参数的名称。
NullReferenceException、IndexOutOfRangeException 和 AccessViolationException
❌ 不允许公开调用的 API 显式或隐式引发 NullReferenceException, AccessViolationException或者 IndexOutOfRangeException。 这些异常是由执行环境专门保留并抛出的,在大多数情况下,这些异常指示了一个错误。
请执行参数检查以避免引发这些异常。 引发这些异常会暴露您方法的实现细节,这些细节可能会随时间变化。
StackOverflowException
❌ 请勿显式引发 StackOverflowException。 该异常只应由 CLR 显式引发。
❌ 请勿捕获 StackOverflowException
。
在任意堆栈溢出的情况下,编写能够保持一致性的托管代码几乎是不可能的。 CLR 的非托管部分通过使用探测将堆栈溢出移动到明确定义的位置而不是通过从任意堆栈溢出中退出来保持一致。
内存不足异常
❌ 请勿显式引发 OutOfMemoryException。 此异常仅由 CLR 基础结构引发。
ComException、SEHException 和 ExecutionEngineException
❌ 请勿显式引发 COMException、ExecutionEngineException 和 SEHException。 这些异常仅由 CLR 基础结构引发。
部分内容 © 2005, 2009 Microsoft 公司。 保留所有权利。
获得皮尔逊教育公司许可后重印自 框架设计准则:可重用 .NET 库的约定、习惯和模式 ,由 Krzysztof Cwalina 和 Brad Abrams 编写,并作为微软 Windows 开发系列中的出版物之一,于 2008 年 10 月 22 日由 Addison-Wesley Professional 出版。