Compartilhar via


CA1027: Marcar enums com FlagsAttribute

TypeName

MarkEnumsWithFlags

CheckId

CA1027

<strong>Categoria</strong>

Microsoft.design

Alteração significativa

Não-separável

Causa

Os valores de uma enumeração pública são potências de dois ou são combinações de outros valores que são definidos na enumeração, e o System.FlagsAttribute atributo não estiver presente.Para reduzir os falsos positivos, esta regra não relata uma violação de enumerações que possuem valores contíguos.

Descrição da regra

Uma enumeração é um tipo de valor que define um conjunto de constantes nomeadas relacionados.Aplicar FlagsAttribute em uma enumeração quando suas constantes nomeadas podem ser combinados de forma significativa.Por exemplo, considere uma enumeração dos dias da semana em um aplicativo que mantém o controle dos recursos do dia que estão disponíveis.Se a disponibilidade de cada recurso é codificada usando a enumeração que tenha FlagsAttribute presente, qualquer combinação de dias pode ser representado.Sem o atributo, apenas um dia da semana podem ser representado.

Para campos que armazenam enumerações podem ser combinadas, os valores de enumeração individuais são tratados como grupos de bits no campo.Portanto, esses campos são, às vezes, denominados campos de bits.Para combinar valores de enumeração para armazenamento em um campo de bits, use os operadores booleanos de condicionais.Para testar um campo de bit para determinar se um valor de enumeração específico está presente, use os operadores lógicos booleanos.Para um campo de bits armazenar e recuperar valores de enumeração combinados corretamente, cada valor que é definido na enumeração deve ser uma potência de dois.A menos que este é o caso, os operadores lógicos booleanos não será capazes de extrair os valores de enumeração individuais que são armazenados no campo.

Como corrigir violações

Para corrigir uma violação desta regra, adicione FlagsAttribute à enumeração.

Quando suprimir avisos

Se você não quiser que os valores de enumeração para ser podem ser combinadas, suprimir um aviso da regra.

Exemplo

No exemplo a seguir, DaysEnumNeedsFlags é uma enumeração que atenda os requisitos para o uso de FlagsAttribute, mas não tem.O ColorEnumShouldNotHaveFlag enumeração não tem valores que são potências de dois, mas especifica incorretamente FlagsAttribute.Isso viola a regra CA2217: Não marque enums com FlagsAttribute.

using System;

namespace DesignLibrary
{
// Violates rule: MarkEnumsWithFlags.

   public enum DaysEnumNeedsFlags 
   {
      None        = 0,
      Monday      = 1,
      Tuesday     = 2,
      Wednesday   = 4,
      Thursday    = 8,
      Friday      = 16,
      All         = Monday| Tuesday | Wednesday | Thursday | Friday
   }
   // Violates rule: DoNotMarkEnumsWithFlags.
   [FlagsAttribute]
   public enum ColorEnumShouldNotHaveFlag 
   {
      None        = 0,
      Red         = 1,
      Orange      = 3,
      Yellow      = 4
   }
}

Regras relacionadas

CA2217: Não marque enums com FlagsAttribute

Consulte também

Referência

System.FlagsAttribute