Condividi tramite


CA2217: Non contrassegnare le enumerazioni con FlagsAttribute

TypeName

DoNotMarkEnumsWithFlags

CheckId

CA2217

Category

Microsoft.Usage

Breaking Change

Non sostanziale

Causa

Un'enumerazione visibile esternamente è contrassegnata con FlagsAttribute e presenta uno o più valori che non sono potenze di due o una combinazione degli altri valori definiti sull'enumerazione.

Descrizione della regola

L'attributo FlagsAttribute deve essere presente solo se ogni valore definito nell'enumerazione è una potenza di due o una combinazione di valori definiti.

Come correggere le violazioni

Per correggere una violazione di questa regola, rimuovere FlagsAttribute dall'enumerazione.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio riportato di seguito viene illustrata un'enumerazione, Color, che contiene il valore 3, il quale non è una potenza di due, né una combinazione di nessuno dei valori definiti. L'enumerazione Color non deve essere contrassegnata con l'attributo 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    
    };
}

Nell'esempio riportato di seguito viene illustrata un'enumerazione, Days, che soddisfa i requisiti necessari per essere contrassegnata con l'attributo 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    
    };
}

Regole correlate

CA1027: Contrassegnare le enumerazioni con FlagsAttribute

Vedere anche

Riferimenti

System.FlagsAttribute