使用标准异常类型

注意

此内容根据 Pearson Education, Inc. 许可转载自《框架设计指南:可重用 .NET 库的约定、习语和模式第二版》。 该版本于 2008 年出版,并在此后于第三版对该书进行了全面修订。 此页上的一些信息可能已过时。

本部分介绍框架提供的标准异常及其用法的详细信息。 该列表并不是详尽无遗的。 有关其他 Framework 异常类型的用法,请参阅 .NET Framework 参考文档。

异常和 SystemException

❌ 请勿引发 System.ExceptionSystem.SystemException

❌ 请勿在框架代码中捕获 System.ExceptionSystem.SystemException,除非你打算重新引发。

❌ 请避免捕获 System.ExceptionSystem.SystemException,顶级异常处理程序除外。

ApplicationException

❌ 请勿引发或派生自 ApplicationException

InvalidOperationException

✔️ 如果对象处于不适当的状态,请务必引发 InvalidOperationException

ArgumentException、System.argumentnullexception 和 ArgumentOutOfRangeException

✔️ 如果向成员传递了错误的参数,请务必引发 ArgumentException 或其子类型之一。 如果适用,最好使用派生程度最高的异常类型。

✔️ 请务必在引发 ArgumentException 的子类之一时设置 ParamName 属性。

此属性表示导致引发异常的参数的名称。 请注意,可以使用构造函数重载之一设置属性。

✔️ 请务必使用 value 作为属性资源库的隐式值参数的名称。

NullReferenceException、IndexOutOfRangeException 和 AccessViolationException

❌ 请勿允许公开调用的 API 显式或隐式抛出 NullReferenceExceptionAccessViolationExceptionIndexOutOfRangeException。 这些异常由执行引擎保留并引发,在大多数情况下表明存在 bug。

请执行参数检查以避免引发这些异常。 引发这些异常会公开方法的实现详细信息,这些详细信息可能会随时间变化。

StackOverflowException

❌ 请勿显式引发 StackOverflowException。 该异常只应由 CLR 显式引发。

❌ 请勿捕获 StackOverflowException

在存在任意堆栈溢出的情况下,几乎不可能编写保持一致的托管代码。 CLR 的非托管部分通过使用探测将堆栈溢出移动到明确定义的位置而不是通过从任意堆栈溢出中退出来保持一致。

OutOfMemoryException

❌ 请勿显式引发 OutOfMemoryException。 此异常仅由 CLR 基础结构引发。

ComException、SEHException 和 ExecutionEngineException

❌ 请勿显式引发 COMExceptionExecutionEngineExceptionSEHException。 这些异常仅由 CLR 基础结构引发。

Portions © 2005, 2009 Microsoft Corporation 版权所有。 保留所有权利。

在 Pearson Education, Inc. 授权下,由 Addison-Wesley Professional 作为 Microsoft Windows 开发系列的一部分再版自 Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition(Framework 设计准则:可重用 .NET 库的约定、惯例和模式第 2 版),由 Krzysztof Cwalina 和 Brad Abrams 发布于 2008 年 10 月 22 日。

请参阅