CA2217: enums を FlagsAttribute に設定しません

TypeName

DoNotMarkEnumsWithFlags

CheckId

CA2217

カテゴリ

Microsoft.Usage

互換性に影響する変更点

なし

原因

外部から参照できる列挙型が FlagsAttribute でマークされ、その列挙型に、2 の累乗でもその列挙型で定義されている他の値の組み合わせでもない値が 1 つ以上含まれています。

規則の説明

列挙型で定義された値が 2 の累乗値または定義された値の組み合わせの場合にのみ、列挙型に FlagsAttribute を指定します。

違反の修正方法

この規則違反を修正するには、列挙型から FlagsAttribute を削除します。

警告を抑制する状況

この規則による警告は抑制しないでください。

使用例

次の例に、Color という列挙型を示します。この列挙型には、値 3 が含まれます。これは、2 の累乗ではなく、また、定義された値の組み合わせでもありません。 そのため、Color 列挙型を FlagsAttribute でマークすることはできません。

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    
    };
}

関連規則

CA1027: FlagsAttribute で列挙値をマークします

参照

参照

System.FlagsAttribute