CA2217:不要使用 FlagsAttribute 标记枚举
类型名 |
DoNotMarkEnumsWithFlags |
CheckId |
CA2217 |
类别 |
Microsoft.Usage |
是否重大更改 |
否 |
原因
在外部可见的枚举使用 FlagsAttribute 标记,并且它包含的一个或多个值不是 2 的幂或该枚举中其他定义的值的组合。
规则说明
只有当枚举中定义的每一个值是 2 的幂或所定义值的组合时,该枚举才可以显示 FlagsAttribute 属性。
如何解决冲突
要修复与该规则的冲突,请从枚举中移除 FlagsAttribute。
何时禁止显示警告
不要禁止显示此规则发出的警告。
示例
下面的示例显示了枚举 Color,该枚举包含值 3,该值既不是 2 的幂,也不是任何定义的值的组合。 不应使用 FlagsAttribute 标记 Color 枚举。
Imports System
Namespace Samples
' Violates this rule
<FlagsAttribute()> _
Public Enum Color
None = 0
Red = 1
Orange = 3
Yellow = 4
End Enum
End Namespace
using System;
namespace Samples
{
// Violates this rule
[FlagsAttribute]
public enum Color
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
}
using namespace System;
namespace Samples
{
// Violates this rule
[FlagsAttribute]
public enum class Color
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
};
}
下面的示例显示了枚举 Days,该枚举符合用 System.FlagsAttribute 标记的要求。
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
using System;
namespace Samples
{
[FlagsAttribute]
public enum Days
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday| Tuesday | Wednesday | Thursday | Friday
}
}
using namespace System;
namespace Samples
{
[FlagsAttribute]
public enum class Days
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday| Tuesday | Wednesday | Thursday | Friday
};
}