CA1027: marcar enums com FlagsAttribute
TypeName |
MarkEnumsWithFlags |
CheckId |
CA1027 |
Categoria |
Microsoft.Design |
Alteração Significativa |
Sem quebra |
Causa
Os valores de uma enumeração pública são a potência de dois ou são combinações de outros valores que estão definidos na enumeração, e o atributo de FlagsAttribute não está presente.Para reduzir falsos positivos, esta regra não informa uma violação para enumerações que têm valores contíguas.
Descrição da Regra
Uma enumeração é um tipo de valor que define um conjunto de constantes nomeadas relacionadas.Aplicar FlagsAttribute a uma enumeração quando as constantes nomeadas podem ser combinadas significativa.Por exemplo, considere uma enumeração dos dias da semana em um aplicativo que se manter o controle dos recursos do dia estão disponíveis.Se a disponibilidade de cada recurso é codificada usando a enumeração que tem FlagsAttribute atual, qualquer combinação de dias pode ser representada.Sem o atributo, apenas um dia da semana pode ser representado.
Para os campos que armazenam enumerações combináveis, os valores de enumeração individuais são tratados como grupos de bit no campo.Consequentemente, esses campos são referidos às vezes como campos de bit.Para combinar os valores de enumeração para armazenamento em um bit campo, use os operadores boolianos condicionais.Para testar um bit coloque para determinar se um valor de enumeração específica estiver presente, usam os operadores lógicos boolianos.Para colocar um bit para armazenar e recuperar corretamente valores de enumeração combinados, cada valor que é definido na enumeração deve ser uma potência de dois.A menos que isso seja isso, os operadores lógicos boolianos não poderão 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 a enumeração.
Quando Suprimir Alertas
Suprima um aviso dessa regra se você não quiser que os valores de enumeração para ser combinável.
Exemplo
No exemplo a seguir, DaysEnumNeedsFlags é uma enumeração que atenda aos requisitos para usar FlagsAttribute, mas não tem o.A enumeração de ColorEnumShouldNotHaveFlag não tem valores que são a potência de dois, mas especifica FlagsAttributeincorretamente.Isso violará a regra CA2217: não marcar 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 marcar enums com FlagsAttribute