CA2217:列挙型を FlagsAttribute に設定しません
プロパティ | 値 |
---|---|
ルール ID | CA2217 |
Title | 列挙型を FlagsAttribute に設定しません |
[カテゴリ] | 使用方法 |
修正が中断ありか中断なしか | なし |
.NET 8 では既定で有効 | いいえ |
原因
列挙型が FlagsAttribute でマークされ、その列挙型に、2 の累乗でもなく、その列挙型で定義されている他の値の組み合わせでもない値が 1 つ以上含まれています。
デフォルトでは、この規則の対象は外部から参照できる列挙型のみですが、これは構成可能です。
規則の説明
列挙型では、その列挙型で定義されている各値が 2 の累乗または定義されている値の組み合わせである場合にのみ、FlagsAttribute が存在する必要があります。
違反の修正方法
この規則の違反を修正するには、列挙型から FlagsAttribute を削除します。
どのようなときに警告を抑制するか
この規則による警告は抑制しないでください。
分析するコードを構成する
次のオプションを使用して、コードベースのどの部分に対してこの規則を実行するか構成します。
このオプションを構成できる対象は、この規則だけ、それを適用するすべての規則、それを適用するこのカテゴリ (使用方法) のすべての規則のいずれかです。 詳細については、「コード品質規則の構成オプション」を参照してください。
特定の API サーフェイスを含める
ユーザー補助に基づいて、この規則を実行するコードベースの部分を構成できます。 たとえば、非パブリック API サーフェイスでのみ規則を実行するように指定するには、プロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。
dotnet_code_quality.CAXXXX.api_surface = private, internal
使用例
次のコードは、値 3 を含む列挙型 Color
を示しています。 3 は 2 の累乗でもなく、定義された値の組み合わせでもありません。 Color
列挙型を FlagsAttribute に設定しないようにする必要があります。
// 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
次のコードは、FlagsAttribute に設定するという要件を満たす列挙型 Days
を示しています。
[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
関連規則
CA1027:列挙型を FlagsAttribute に設定します
関連項目
.NET