Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

System.FlagsAttribute