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 に設定します

関連項目