CA2201:不要引发保留的异常类型

类型名

DoNotRaiseReservedExceptionTypes

CheckId

CA2201

类别

Microsoft.Usage

是否重大更改

原因

某方法引发的异常类型过于一般或者是运行时保留的类型。

规则说明

下面的异常类型过于一般,不能向用户提供足够信息:

下面的异常类型是保留类型,仅应由公共语言运行时引发:

不要引发一般异常

如果引发一般异常类型(例如库或框架中的 ExceptionSystemException),则会强制使用者捕捉所有异常,包括使用者不知如何处理的未知异常。

应引发框架中已存在的派生程度更高的类型,或创建从 Exception 派生的自己的类型。

引发特定的异常

下表列出了参数和验证这些参数将引发的异常,包括属性的 set 访问器中的 value 参数。

参数说明

异常

null 引用 

System.ArgumentNullException

超出值的允许范围(例如集合或列表的索引)

System.ArgumentOutOfRangeException

无效的 enum 值

System.ComponentModel.InvalidEnumArgumentException

包含的格式不符合方法的参数规范(例如 ToString(String) 的格式字符串)

System.FormatException

其他无效情况

System.ArgumentException

当操作对对象的当前状态无效时   引发 System.InvalidOperationException

对已释放的对象执行操作时   引发 System.ObjectDisposedException

当操作不受支持(例如,在打开用于读取的 Stream 中重写 Stream.Write)时   引发 System.NotSupportedException

转换会导致溢出(例如,显式强制转换运算符重载)时   引发 System.OverflowException

对于所有其他情形,请考虑创建从 Exception 派生的自己的类型并引发该异常。

如何解决冲突

要修复与该规则的冲突,请将引发的异常类型更改为不是保留类型之一的特定类型。

何时禁止显示警告

不要禁止显示此规则发出的警告。

相关规则

CA1031:不要捕捉一般异常类型