Sdílet prostřednictvím


CA2217: Neoznačujte výčty pomocí FlagsAttribute

TypeName

DoNotMarkEnumsWithFlags

CheckId

CA2217

Kategorie

Microsoft.Usage

Narušující změna

Nenarušující

Příčina

Výčet viditelný z vnějšku je označen atributem FlagsAttribute a má jednu nebo více hodnot, které nejsou mocninami dvou nebo kombinací jiných definovaných hodnot výčtu.

Popis pravidla

Výčet by měl být atributem FlagsAttribute označen pouze, pokud je každá hodnota ve výčtu mocninou dvou nebo kombinací definovaných hodnot.

Jak vyřešit porušení

Pro vyřešení porušení tohoto pravidla je potřeba odstranit atribut FlagsAttribute od výčtu.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Příklad

Následující příklad ukazuje výčet Color, který obsahuje hodnotu 3, která není mocninou dvou ani kombinací definovaných hodnot.Výčet Color by neměl být označen atributem 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    
    };
}

Následující příklad ukazuje výčet Days, který odpovídá požadavkům pro označení atributem 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    
    };
}

Související pravidla

CA1027: Označte výčty pomocí FlagsAttribute

Viz také

Referenční dokumentace

FlagsAttribute