CA2217:不要使用 FlagsAttribute 标记枚举
属性 | 值 |
---|---|
规则 ID | CA2217 |
标题 | 不要使用 FlagsAttribute 标记枚举 |
类别 | 使用情况 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 否 |
原因
使用 FlagsAttribute 标记了枚举,并且它包含的一个或多个值不是 2 的幂或不是为该枚举定义的其他值的组合。
默认情况下,此规则仅查看外部可见的枚举,但这是可配置的。
规则说明
仅当枚举中定义的每个值都是 2 的幂或定义的值的组合时,枚举才应该具有 FlagsAttribute。
如何解决冲突
若要解决与此规则的冲突,请从枚举中删除 FlagsAttribute。
何时禁止显示警告
不禁止显示此规则发出的警告。
配置代码以进行分析
使用下面的选项来配置代码库的哪些部分要运行此规则。
可以仅为此规则、为适用的所有规则或为适用的此类别(使用情况)中的所有规则配置此选项。 有关详细信息,请参阅代码质量规则配置选项。
包含特定的 API 图面
你可以根据代码库的可访问性,配置要针对其运行此规则的部分。 例如,若要指定规则应仅针对非公共 API 图面运行,请将以下键值对添加到项目中的 .editorconfig 文件:
dotnet_code_quality.CAXXXX.api_surface = private, internal
示例
以下代码演示了包含值 3 的枚举 Color
。 3 不是 2 的幂,也不是任何定义的值的组合。 不应使用 FlagsAttribute 标记 Color
枚举。
// Violates this rule
[FlagsAttribute]
public enum Color
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
Imports System
Namespace Samples
' Violates this rule
<FlagsAttribute()> _
Public Enum Color
None = 0
Red = 1
Orange = 3
Yellow = 4
End Enum
End Namespace
以下代码演示了枚举 Days
,该枚举满足使用 FlagsAttribute 进行标记的要求:
[FlagsAttribute]
public enum Days
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday | Tuesday | Wednesday | Thursday | Friday
}
Imports System
Namespace Samples
<FlagsAttribute()> _
Public Enum Days
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
End Enum
End Namespace