| 属性 | 值 |
|---|---|
| 规则 ID | CA2219 |
| 标题 | 在异常子句中不引发异常 |
| 类别 | 使用情况 |
| 修复会引起中断还是不会引起中断 | 非中断,中断 |
| 在 .NET 10 中默认启用 | 作为一种建议 |
| 适用的语言 | C# 和 Visual Basic |
原因
从 finally、filter 或 fault 子句中引发了异常。
规则说明
当异常子句中引发异常时,会大大增加调试的难度。
如果在 finally 或 fault 子句中引发异常,新异常将隐藏活动异常(如果存在)。 这使得很难检测和调试原始错误。
当筛选子句中引发异常时,运行时环境会悄然捕获该异常,并使筛选结果为 false。 无法区分对 filter 评估为 false 的结果和从 filter 中抛出的异常。 这使得很难检测和调试过滤逻辑中的错误。
如何解决违规
为了解决此规则的违反,请不要从 finally、过滤器或故障子句中显式抛出异常。
Example
try
{
// ...
}
finally
{
// This code violates the rule.
throw new Exception();
}
何时禁止显示警告
请勿禁止显示此规则的警告。 无论何种情况,在异常子句中引发的异常都对执行代码无益。