值
规则 ID
CA1508
类别
可维护性
修复是中断修复还是非中断修复
非中断
原因
方法具有在运行时计算结果始终为 true 或 false 的条件代码。 这会导致条件的 false 分支中出现死代码。
默认情况下,此规则会分析整个代码库,但这是可配置的。
规则说明
方法可以具有条件代码,如 if 语句、二进制表达式(==、!=、<、>)、null 检查等。例如,请考虑以下代码:
public void M(int i, int j)
{
if (i != 0)
{
return;
}
if (j != 0)
{
return;
}
// Below condition will always evaluate to 'false' as 'i' and 'j' are both '0' here.
if (i != j)
{
// Code in this 'if' branch is dead code.
// It can either be removed or refactored.
...
}
}
C# 和 VB 编译器会分析与编译时常量值相关且计算结果始终为 true 或 false 的条件检查。 此分析器会对非常量变量执行数据流分析,以确定与非常量值相关的冗余条件检查。 在前面的代码中,对于到达 i != j 检查的所有代码路径,分析器确定 i 和 j 均为 0。 因此,在运行时,此检查的计算结果将始终为 false。 if 语句内的代码是死代码,可以删除或重构。 同样,分析器还会跟踪变量是否为 null,并报告冗余 null 检查。
备注
此分析器会对非常量值执行成本高昂的数据流分析。 这可能会增加某些代码库的总体编译时间。
何时禁止显示警告
如果不在乎代码的可维护性,可安全地禁止显示此规则的冲突。 还可以禁止显示标识为误报的冲突。 存在可从多个线程执行的并发代码时,这些情况都可能发生。
配置代码以进行分析
使用下面的选项来配置代码库的哪些部分要运行此规则。
排除特定符号
排除特定类型及其派生类型
可以仅为此规则、为所有规则或为此类别(可维护性)中的所有规则配置这些选项。 有关详细信息,请参阅代码质量规则配置选项。
排除特定符号
可以从分析中排除特定符号,如类型和方法。 例如,若要指定规则不应针对名为 MyType 的类型中的任何代码运行,请将以下键值对添加到项目中的 .editorconfig 文件:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
选项值中允许的符号名称格式(用 | 分隔):
仅符号名称(包括具有相应名称的所有符号,不考虑包含的类型或命名空间)。
完全限定的名称,使用符号的文档 ID 格式。 每个符号名称都需要带有一个符号类型前缀,例如表示方法的 M:、表示类型的 T:,以及表示命名空间的 N:。
.ctor 表示构造函数,.cctor 表示静态构造函数。
示例:
选项值
总结
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
匹配名为 MyType 的所有符号。
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2
匹配名为 MyType1 或 MyType2 的所有符号。
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType)
匹配带有指定的完全限定签名的特定方法 MyMethod。
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType)
匹配带有各自的完全限定签名的特定方法 MyMethod1 和 MyMethod2。
排除特定类型及其派生类型
可以从分析中排除特定类型及其派生类型。 例如,若要指定规则不应针对名为 MyType 的类型及其派生类型中的任何代码运行,请将以下键值对添加到项目中的 .editorconfig 文件:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
选项值中允许的符号名称格式(用 | 分隔):
仅类型名称(包括具有相应名称的所有类型,不考虑包含的类型或命名空间)。
完全限定的名称,使用符号的文档 ID 格式,前缀为 T:(可选)。
示例:
选项值
总结
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
匹配名为 MyType 的所有类型及其所有派生类型。
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2
匹配名为 MyType1 或 MyType2 的所有类型及其所有派生类型。
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType
匹配带有给定的完全限定名称的特定类型 MyType 及其所有派生类型。
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2
匹配带有各自的完全限定名称的特定类型 MyType1 和 MyType2 及其所有派生类型。
另请参阅
可维护性规则
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有