Marcar enums com FlagsAttribute
TypeName |
MarkEnumsWithFlags |
CheckId |
CA1027 |
Category (Categoria) |
Microsoft.Design |
Quebrando alterar |
Não separável |
Causa
Os valores de uma enumeração pública são potências de 2 ou são combinações de outros valores definidos na enumeração e o System.FlagsAttribute atributo não está presente. Para reduzir os falsos positivos, esta regra não relata uma violação de enumerações com valores contíguos.
Descrição da regra
Uma enumeração é um tipo de valor que define um conjunto de constantes nomeadas relacionados.Aplicar FlagsAttribute para uma enumeração de 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 quais dias recursos estão disponível.Se a disponibilidade de cada recurso é codificada usando a enumeração com FlagsAttribute pode ser representado presente, qualquer combinação de dias. Sem o atributo pode ser representado apenas um dia da semana.
Para campos que armazenam enumerações combinadas, sistema autônomo valores de enumeração individuais são tratados sistema autônomo grupos de bits dentro do campo.Portanto, esses campos são às vezes chamados campos de bit.Para agrupar valores de enumeração para o armazenamento em um campo de bit, use os operadores booliano condicionais.Para testar um campo de bit para determinar se um valor de enumeração específico está presente, use os operadores booliano lógicos.Para um campo de bit armazenar e recuperar valores de enumeração combinados corretamente, cada valor definido na enumeração deve ser uma potência de dois.A menos que isso seja isso, os operadores lógicos booliano não poderá extrair os valores de enumeração individuais armazenados no campo.
Como corrigir violações
Para corrigir uma violação dessa regra, adicione FlagsAttribute como a enumeração.
Quando suprimir avisos
Elimina um aviso essa regra se não quiser que os valores de enumeração seja combinado.
Exemplo
No exemplo a seguir, DaysEnumNeedsFlags é uma enumeração que atenda aos requisitos de uso FlagsAttribute, mas não tem. The ColorEnumShouldNotHaveFlag enumeração não possui valores que são potências de 2, mas especifica incorretamente FlagsAttribute. Isso viola a regra 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
Não marque enums com FlagsAttribute