Udostępnij za pośrednictwem


CA2217: Nie oznaczaj wyliczeń za pomocą FlagsAttribute

TypeName

DoNotMarkEnumsWithFlags

CheckId

CA2217

Kategoria

Microsoft.Usage

Zmiana kluczowa

Niekluczowa

Przyczyna

Zewnętrznie widoczne wyliczenie jest oznaczone atrybutem FlagsAttribute i posiada jeden lub więcej wartości, które nie są potęgami dwójki lub kombinacji innych zdefiniowanych wartości z wyliczenia.

Opis reguły

Wyliczenie powinno mieć atrybut FlagsAttribute tylko w przypadku, gdy każda wartość zdefiniowana w wyliczeniu jest potęgą 2 lub kombinacją zdefiniowanych wartości.

Jak naprawić naruszenia

Aby rozwiązać naruszenie tej zasady, usuń FlagsAttribute z wyliczenia.

Kiedy pominąć ostrzeżenia

Nie należy pomijać ostrzeżenia dotyczącego tej reguły.

Przykład

Poniższy przykład pokazuje wyliczenie Color, zawierającego wartość 3, która nie jest potęgą 2, ani kombinacją żadnych zdefiniowanych wartości.Wyliczenie Color nie powinno być oznaczone atrybutem 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    
    };
}

Poniższy przykład pokazuje wyliczenie, Days, które spełnia wymagania dla oznaczenia atrybutem 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    
    };
}

Powiązane reguły

CA1027: Oznaczaj wyliczenia za pomocą FlagsAttribute

Zobacz też

Informacje

FlagsAttribute