Compartir a través de


CA2217: No marcar enumeraciones con FlagsAttribute

TypeName

DoNotMarkEnumsWithFlags

Identificador de comprobación

CA2217

Categoría

Microsoft.Usage

Cambio problemático

No

Motivo

Una enumeración visible externamente está marcada con FlagsAttribute y tiene uno o varios valores que no son potencias de dos o una combinación de los otros valores definidos en la enumeración.

Descripción de la regla

Una enumeración debe tener un atributo FlagsAttribute presente sólo si cada valor definido en la enumeración es una potencia de dos o una combinación de valores definidos.

Cómo corregir infracciones

Para corregir una infracción de esta regla, quite FlagsAttribute de la enumeración.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

En el ejemplo siguiente se muestra una enumeración, Color, que contiene el valor 3, que no es una potencia de dos ni una combinación de ninguno de los valores definidos.La enumeración Color no debe marcarse con 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    
    };
}

En el ejemplo siguiente se muestra una enumeración, Days, que cumple los requisitos necesarios para que pueda marcarse con 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    
    };
}

Reglas relacionadas

CA1027: Marcar enumeraciones con FlagsAttribute

Vea también

Referencia

FlagsAttribute