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
Reglas relacionadas
CA1027: Marcar enumeraciones con FlagsAttribute