CA2217: No marcar enumeraciones con FlagsAttribute

Propiedad Value
Identificador de la regla CA2217
Título No marcar enumeraciones con FlagsAttribute
Categoría Uso
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

Una enumeración se marca 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.

De forma predeterminada, esta regla solo examina las enumeraciones visibles externamente, pero es configurable.

Descripción de la regla

Una enumeración solo debe tener FlagsAttribute presente 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, elimine FlagsAttribute de la enumeración.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Configuración del código para analizar

Use la opción siguiente para configurar en qué partes del código base ejecutar esta regla.

Puede configurar esta opción solo para esta regla, para todas las reglas a las que se aplica o para todas las reglas de esta categoría (Uso) a las que se aplica. Para más información, vea Opciones de configuración de reglas de calidad de código.

Incluir superficies de API específicas

Puede configurar en qué partes del código base ejecutar esta regla, en función de su accesibilidad. Por ejemplo, para especificar que la regla solo se debe ejecutar en la superficie de API no públicas, agregue el siguiente par clave-valor a un archivo .editorconfig en el proyecto:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Ejemplos

En el código siguiente se muestra una enumeración, Color, que contiene el valor 3. 3 no es una potencia de dos o una combinación de cualquiera de los valores definidos. La enumeración Color no se debe marcar con FlagsAttribute.

// Violates this rule    
[FlagsAttribute]
public enum Color
{
    None = 0,
    Red = 1,
    Orange = 3,
    Yellow = 4
}
Imports System

Namespace Samples

    ' Violates this rule    
    <FlagsAttribute()> _
    Public Enum Color

        None = 0
        Red = 1
        Orange = 3
        Yellow = 4

    End Enum
End Namespace

En el código siguiente se muestra una enumeración, Days, que cumple los requisitos para que se marque con FlagsAttribute:

[FlagsAttribute]
public enum Days
{
    None = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    All = Monday | Tuesday | Wednesday | Thursday | Friday
}
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

CA1027: Marcar enumeraciones con FlagsAttribute

Consulte también