CA1027: Značka výčty s FlagsAttribute
Název_typu |
MarkEnumsWithFlags |
CheckId |
CA1027 |
Kategorie |
Microsoft.design |
Změnit rozdělení |
Bez rozdělení |
Příčina
Hodnoty veřejné výčtu jsou pravomoci dvou nebo kombinace jiné hodnoty, které jsou definovány ve výčtu, a System.FlagsAttribute atribut není k dispozici.Chcete-li snížit falešně pozitivní toto pravidlo nehlásí narušení pro vyčíslení, souvislé hodnot.
Popis pravidla
Výčet je typ hodnoty, který definuje sadu souvisejících s názvem konstanty.Použít FlagsAttribute do výčtu jeho pojmenované konstanty lze srozumitelně kombinaci.Zvažte například výčet dny v týdnu, který sleduje den, které zdroje jsou k dispozici aplikace.Pokud dostupnosti jednotlivých zdrojů je kódován pomocí výčtu, který má FlagsAttribute může být zastoupeny současné libovolnou kombinaci dnů.Bez atributu může být zastoupeny pouze jeden den v týdnu.
Pole obsahující combinable vyčíslení hodnoty výčtu jednotlivých považovány skupiny bitů v poli.Proto taková pole jsou někdy označovány jako bit pole.Hodnoty výčtu pro úložiště bitové pole použijte logické operátory podmíněné.Chcete-li otestovat bitové pole, zda je současná hodnota výčtu specifické logická logické operátory slouží.Bitové pole k ukládání a načítání hodnot výčtu kombinované správně musí být každá hodnota definovaná ve výčtu napájení dvou.Pokud tomu tak je, Boolean logické operátory, nebude možné extrahovat jednotlivé výčet hodnot, které jsou uloženy v poli.
Jak opravit porušení
Porušení tohoto pravidla odstranit, přidat FlagsAttribute do výčtu.
Při potlačení upozornění
Potlačit varování od tohoto pravidla, pokud chcete hodnoty výčtu se combinable.
Příklad
V následujícím příkladu DaysEnumNeedsFlags je výčet, který splňuje požadavky pro použití FlagsAttribute, ale není jej.ColorEnumShouldNotHaveFlag Výčet nemá hodnoty, které jsou pravomoci dvou, ale nesprávně určuje FlagsAttribute.Toto pravidlo porušují CA2217: Neoznačovat výčty s 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
}
}
Souvisejících pravidel
CA2217: Neoznačovat výčty s FlagsAttribute