CA2217: Não marcar enums com FlagsAttribute
Property | valor |
---|---|
ID da regra | CA2217 |
Título | Não marque enums com FlagsAttribute |
Categoria | Utilização |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 9 | Não |
Motivo
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 examina apenas 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 desta regra.
Configurar código para análise
Use a opção a seguir para configurar em quais partes da sua base de código executar essa regra.
Você pode configurar essa opção apenas para esta regra, para todas as regras às quais ela se aplica ou para todas as regras nesta categoria (Uso) às quais ela se aplica. Para obter mais informações, consulte Opções de configuração da regra de qualidade de código.
Incluir superfícies de API específicas
Você pode configurar em quais partes da sua base de código executar essa regra, com base em sua acessibilidade. Por exemplo, para especificar que a regra deve ser executada somente na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig em seu 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 é um poder de dois, ou uma combinação de qualquer um dos valores definidos. A Color
enumeração 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 marcada 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 conexas
CA1027: Marcar enums com FlagsAttribute