CA2217: Não marcar enumerações com FlagsAttribute
Property | Valor |
---|---|
ID da regra | CA2217 |
Título | Não marcar enumerações com FlagsAttribute |
Categoria | Usage |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 9 | Não |
Causa
Uma enumeração é marcada com FlagsAttribute e tem um ou mais valores que não são potências de dois ou uma combinação dos outros valores definidos na enumeração.
Por padrão, essa regra apenas analisa as enumerações visíveis externamente, mas isso é configurável.
Descrição da regra
Uma enumeração deve ter FlagsAttribute presente somente se cada valor definido na enumeração for uma potência de dois ou uma combinação de valores definidos.
Como corrigir violações
Para corrigir uma violação dessa regra, remova FlagsAttribute da enumeração.
Quando suprimir avisos
Não suprima um aviso nessa regra.
Configurar código para analisar
Use a opção a seguir para configurar em quais partes da base de código essa regra deve ser executada.
Você pode configurar essa opção apenas para essa regra, para todas as regras às quais ela se aplica ou para todas as regras nessa categoria (Uso) às quais ela se aplica. Para saber mais, confira Opções de configuração de regra de qualidade de código.
Incluir superfícies de API específicas
É possível configurar em quais partes da base de código essa regra deverá ser executada, com base na acessibilidade. Por exemplo, para especificar que a regra deverá ser executada apenas na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig no projeto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Exemplos
O código a seguir mostra uma enumeração, Color
, que contém o valor 3. 3 não é uma potência de dois ou uma combinação de qualquer um dos valores definidos. A enumeração Color
não deve ser marcada com 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
O código a seguir mostra uma enumeração, Days
, que atende aos requisitos para ser marcado com 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
Regras relacionadas
CA1027: Marcar enumerações com FlagsAttribute