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 está 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 relacionadas. 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 controla os 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 pode ser representado.
Para campos que armazenam as 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 bit. 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 poderá 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
Elimina um aviso esta regra se não quiser que os valores de enumeração para ser podem ser combinadas.
Exemplo
No exemplo a seguir, DaysEnumNeedsFlags é uma enumeração que atende aos requisitos para o uso de FlagsAttribute, mas não tem proprietário. 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