Tento článek byl přeložený strojově. Pokud chcete zobrazit článek v angličtině, zaškrtněte políčko Angličtina. Anglickou verzi článku můžete také zobrazit v místním okně přesunutím ukazatele myši nad text.
Překlad
Angličtina

Třída Enum

.NET Framework (current version)
 

Poskytuje základní třídu pro výčty.

Obor názvů:   System
Sestavení:  mscorlib (v mscorlib.dll)


[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Enum : ValueType, IComparable, IFormattable, 
	IConvertible

NázevPopis
System_CAPS_protmethodEnum()

Inicializuje novou instanci Enum třídy.

NázevPopis
System_CAPS_pubmethodCompareTo(Object)

Porovná tuto instanci se zadaným objektem a vrací údaj o jejich relativních hodnotách.

System_CAPS_pubmethodEquals(Object)

Vrací hodnotu určující, zda je tato instance rovna zadanému objektu.(Přepisuje ValueType.Equals(Object).)

System_CAPS_protmethodFinalize()

Umožňuje objektu pokusit se uvolnit prostředky a provést další operace vyčištění předtím, než je odstraněn při uvolňování paměti.

(Zděděno z Object.)

System_CAPS_pubmethodSystem_CAPS_staticFormat(Type, Object, String)

Zadaná hodnota zadané výčtového typu převede na její ekvivalentní řetězcové vyjádření podle zadaného formátu.

System_CAPS_pubmethodGetHashCode()

Vrátí kód hash hodnoty této instance.(Přepisuje ValueType.GetHashCode().)

System_CAPS_pubmethodSystem_CAPS_staticGetName(Type, Object)

Načte název konstanty v zadané výčet, který má zadanou hodnotu.

System_CAPS_pubmethodSystem_CAPS_staticGetNames(Type)

Načte pole názvy konstanty v zadaný výčet.

System_CAPS_pubmethodGetType()

Získá Type aktuální instance.(Zděděno z Object.)

System_CAPS_pubmethodGetTypeCode()

Vrátí typ kód základní typ tohoto člena výčtu.

System_CAPS_pubmethodSystem_CAPS_staticGetUnderlyingType(Type)

Vrací základní typ zadaný výčet.

System_CAPS_pubmethodSystem_CAPS_staticGetValues(Type)

Načte pole hodnot konstanty v zadané výčtu.

System_CAPS_pubmethodHasFlag(Enum)

Určuje, zda jeden nebo více bitových polí jsou nastaveny v aktuální instance.

System_CAPS_pubmethodSystem_CAPS_staticIsDefined(Type, Object)

Určí, zda v zadaném výčtu existuje konstanta se zadanou hodnotou.

System_CAPS_protmethodMemberwiseClone()

Vytvoří mělká kopie aktuálního Object.(Zděděno z Object.)

System_CAPS_pubmethodSystem_CAPS_staticParse(Type, String)

Převede řetězcovou reprezentaci názvu nebo číselné hodnoty jedné nebo několika konstant výčtu na ekvivalentní objekt výčtu.

System_CAPS_pubmethodSystem_CAPS_staticParse(Type, String, Boolean)

Převede řetězcovou reprezentaci názvu nebo číselné hodnoty jedné nebo několika konstant výčtu na ekvivalentní objekt výčtu. Parametr určuje, zda je operace velká a malá písmena.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Byte)

Převede zadané celé číslo bez znaménka 8 bitů na člena výčtu.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Int16)

Převede zadané 16bitové znaménkem na člena výčtu.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Int32)

Převede zadaný 32bitové číslo se znaménkem na člena výčtu.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Int64)

Převede zadané 64-bit znaménkem na člena výčtu.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Object)

Převede zadaný objekt s celočíselnou hodnotu na člena výčtu.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, SByte)

Převede hodnotu zadanou 8bitové číslo se znaménkem na člena výčtu.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, UInt16)

Převede hodnotu zadanou 16bitové celé číslo bez znaménka na člena výčtu.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, UInt32)

Převede hodnotu zadanou 32bitové celé číslo bez znaménka na člena výčtu.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, UInt64)

Převede hodnotu zadanou 64bitové celé číslo bez znaménka na člena výčtu.

System_CAPS_pubmethodToString()

Převede hodnotu této instance na její ekvivalentní řetězcové vyjádření.(Přepisuje ValueType.ToString().)

System_CAPS_pubmethodToString(IFormatProvider)

Zastaralé Přetížení této metody je zastaralá; Použijte Enum.ToString().

System_CAPS_pubmethodToString(String)

Převede hodnotu této instance na její ekvivalentní řetězcové vyjádření pomocí určeného formátu.

System_CAPS_pubmethodToString(String, IFormatProvider)

Zastaralé Přetížení této metody je zastaralá; Použijte Enum.ToString(String).

System_CAPS_pubmethodSystem_CAPS_staticTryParse<TEnum>(String, TEnum)

Převede řetězcovou reprezentaci názvu nebo číselné hodnoty jedné nebo několika konstant výčtu na ekvivalentní objekt výčtu. Vrácená hodnota označuje, zda převod proběhl úspěšně.

System_CAPS_pubmethodSystem_CAPS_staticTryParse<TEnum>(String, Boolean, TEnum)

Převede řetězcovou reprezentaci názvu nebo číselné hodnoty jedné nebo několika konstant výčtu na ekvivalentní objekt výčtu. Parametr určuje, zda je operace malá a velká písmena. Vrácená hodnota označuje, zda převod proběhl úspěšně.

NázevPopis
System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToBoolean(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnota na logickou hodnotu na základě základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToByte(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnotu 8bitové celé číslo bez znaménka na základě základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToChar(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnota znaku Unicode podle základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDateTime(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnota DateTime podle základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDecimal(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnota Decimal podle základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDouble(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnota dvojitou přesností plovoucí bodu číslo podle základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt16(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnotu na 16 bitů se znaménkem na základě základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt32(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnota 32bitové číslo se znaménkem podle základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt64(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnotu na 64-bit se znaménkem na základě základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSByte(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnota 8 bitů se znaménkem podle základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSingle(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnotu na jednoduchou přesností číslo s plovoucí desetinnou čárkou na základě základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToType(Type, IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnota zadaného typu na základě základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt16(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnotu na 16bitové číslo bez znaménka na základě základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt32(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnota 32bitové celé číslo bez znaménka na základě základního typu.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt64(IFormatProvider)

Toto rozhraní API podporuje infrastrukturu produkt a není určené pro použití přímo z vašeho kódu. Převede aktuální hodnota 64bitové celé číslo bez znaménka na základě základního typu.

Výčet je sada pojmenované konstanty, jehož základní typ je jakýmikoli integrální. Pokud žádný základní typ explicitně deklarována, Int32 se používá. Enum je základní třída pro všechny výčty v rozhraní .NET Framework. Výčtové typy jsou definovány enum – klíčové slovo v jazyce C# a Enum...End Enum vytvořit v jazyku Visual Basic.

Enum poskytuje metody pro porovnání instance této třídy, převodu hodnoty instance na jeho řetězcovou reprezentaci, převodu řetězcové vyjádření čísla do instance této třídy a vytvoření instance zadaný výčet a hodnotu.

Výčet lze považovat také bitové pole. Další informace najdete v tématu neúplný členy a atribut příznaky části a FlagsAttribute tématu.

V tomto tématu:

Vytváření typ výčtu
Vytvoření instance typu výčtu
Osvědčené postupy – výčet
Provádění operací s výčty
      Provádění převody
      Analýza hodnoty výčtu
      Formátování hodnot výčtu
Iterace členové výčtu
Členové neúplný a atribut příznaky
Přidání metody – výčet

Programovací jazyky obvykle poskytují syntaxi deklarovat výčet, který obsahuje sadu pojmenované konstanty a jejich hodnot. Následující příklad ilustruje syntaxe jazyka C# a Visual Basic používá k definování výčet. Vytvoří výčet s názvem ArrivalStatus má tři členy: ArrivalStatus.Early, ArrivalStatus.OnTime, a ArrivalStatus.Late. Všimněte si, že v obou případech výčtu nedědí explicitně z Enum; vztah dědičnosti se zpracovává implicitně kompilátorem.

public enum ArrivalStatus { Late=-1, OnTime=0, Early=1 };
System_CAPS_warningUpozornění

Měli byste nikdy vytvořit typ výčtu, jehož základní typ je jiný integrální nebo Char. I když můžete vytvořit takový typ výčtu pomocí reflexe, volání metod, které používají výsledný typ nespolehlivé a může také vyvolat další výjimky.

Stejně jako instanci můžete vytvořit další typ hodnoty můžete vytvořit instanci typu výčtu: deklarace proměnné a přiřazení mezi konstanty výčtu k němu. Následující příklad vytvoří ArrivalStatus jehož hodnota je ArrivalStatus.OnTime.

public class Example
{
   public static void Main()
   {
      ArrivalStatus status = ArrivalStatus.OnTime;
      Console.WriteLine("Arrival Status: {0} ({0:D})", status);
   }
}
// The example displays the following output:
//       Arrival Status: OnTime (0)

Můžete také vytvořit instanci hodnotou výčtu následujícími způsoby:

  • Pomocí funkce konkrétní programovací jazyk přetypování (jako v C#) nebo převést (jako v jazyce Visual Basic) celočíselnou hodnotu na hodnotu výčtu. Následující příklad vytvoří ArrivalStatus objekt, jehož hodnota je ArrivalStatus.Early tímto způsobem.

    ArrivalStatus status2 = (ArrivalStatus) 1;
    Console.WriteLine("Arrival Status: {0} ({0:D})", status2);
    // The example displays the following output:
    //       Arrival Status: Early (1)
    
  • Při volání jeho implicitní výchozí konstruktor. Jak ukazuje následující příklad, v takovém případě základní hodnotu výčtu instance je 0. Však to není nezbytně hodnota platná konstanta ve výčtu.

    ArrivalStatus status1 = new ArrivalStatus();
    Console.WriteLine("Arrival Status: {0} ({0:D})", status1);
    // The example displays the following output:
    //       Arrival Status: OnTime (0)
    
  • Při volání Parse nebo TryParse<TEnum> Metoda analyzovat řetězec, který obsahuje název konstanta ve výčtu. Další informace najdete v tématu Analýza hodnot výčtu části.

  • Při volání ToObject Metoda převést na typ výčtu celočíselné hodnoty. Další informace najdete v tématu provádění převody části.

Doporučujeme použít následující osvědčené postupy, když definujete výčtové typy:

  • Pokud není definována člena výčtu, jehož hodnota je 0, zvažte vytvoření None výčtové konstanta. Ve výchozím nastavení, je inicializováno paměť použitá pro výčet nula podle modul common language runtime. V důsledku toho pokud nedefinujete konstanta, jehož hodnota je nulová, výčtu bude obsahovat neplatná hodnota při jeho vytvoření.

  • Pokud dojde zřejmé výchozí případě, že vaše aplikace musí představovat, zvažte použití výčtové konstanta, jehož hodnota je nula představují ho. Pokud neexistuje žádný výchozí případu, zvažte použití výčtovým konstanta jehož hodnota je nula. Chcete-li určit případu, který není reprezentován žádné jiné konstanty výčtu.

  • Nezadávejte konstanty výčtu, které jsou vyhrazené pro budoucí použití.

  • Když definujete metody nebo vlastnosti, která přebírá Vypočtená konstanta jako hodnotu, vezměte v úvahu ověřování hodnota. Důvodem je, že můžete převést číselnou hodnotu pro typ výčtu i v případě, že číselná hodnota není definována ve výčtu.

Další osvědčené postupy pro výčtové typy, jejichž konstanty jsou bitová pole jsou uvedeny v neúplný členy a atribut příznaky části.

Při vytváření výčtu, nelze definovat nové metody. Však typ výčtu dědí kompletní sadu statické a instance metody z Enum třídy. V následujících částech zjišťování většinu těchto metod, kromě několik metod, které se běžně používají při práci s hodnotami výčtu.

Můžete převádět mezi člena výčtu a jeho zdrojovým typem pomocí přetypování (v jazyku C#) nebo operátor převodu (v jazyce Visual Basic). Následující příklad používá operátory přetypování nebo převod provést převody z celé výčtové hodnoty a z hodnotou výčtu na celé číslo.

int value3 = 2;
ArrivalStatus status3 = (ArrivalStatus) value3;

int value4 = (int) status3;

Enum Třída také obsahuje ToObject Metoda, která převede hodnotu všech integrálních typů na hodnotu výčtu. Následující příklad používá ToObject(Type, Int32) způsobů, jak převést Int32 k ArrivalStatus hodnotu. Všimněte si, že, protože ToObject vrátí hodnotu typu Object, použití operátor přetypování nebo převod stále může být potřeba převést objekt, který má typ výčtu.

int number = -1;
ArrivalStatus arrived = (ArrivalStatus) ArrivalStatus.ToObject(typeof(ArrivalStatus), number);

Při převodu na hodnotu výčtu celé číslo, je možné přiřadit hodnotu, která není ve skutečnosti člen výčtu. Chcete-li tomu zabránit, můžete předat celé číslo IsDefined Metoda před provedením převod. Následující příklad používá tato metoda k určení, zda elementů v pole celočíselné hodnoty můžete převést na ArrivalStatus hodnoty.

using System;

public enum ArrivalStatus { Unknown=-3, Late=-1, OnTime=0, Early=1 };

public class Example
{
   public static void Main()
   {
      int[] values = { -3, -1, 0, 1, 5, Int32.MaxValue };
      foreach (var value in values)
      {
         ArrivalStatus status;
         if (Enum.IsDefined(typeof(ArrivalStatus), value))
            status = (ArrivalStatus) value;
         else
            status = ArrivalStatus.Unknown;
         Console.WriteLine("Converted {0:N0} to {1}", value, status);
      }
   }
}
// The example displays the following output:
//       Converted -3 to Unknown
//       Converted -1 to Late
//       Converted 0 to OnTime
//       Converted 1 to Early
//       Converted 5 to Unknown
//       Converted 2,147,483,647 to Unknown

I když Enum třída poskytuje implementace explicitního rozhraní IConvertible rozhraní pro převod z hodnotou výčtu integrální typ, by měl použít metody třídy Convert třídy, jako například ToInt32, provádění těchto převody. Následující příklad ukazuje, jak je možné používat GetUnderlyingType Metoda spolu s Convert.ChangeType Metoda převést hodnotu výčtu jeho zdrojovým typem. Všimněte si, že v tomto příkladu nevyžaduje s podkladovým typem výčtu znám v době kompilace.

ArrivalStatus status = ArrivalStatus.Early;
var number = Convert.ChangeType(status, Enum.GetUnderlyingType(typeof(ArrivalStatus)));
Console.WriteLine("Converted {0} to {1}", status, number);
// The example displays the following output:
//       Converted Early to 1

Parse a TryParse<TEnum> metody vám umožňují převést řetězcovou reprezentaci hodnotou výčtu na tuto hodnotu. Řetězcová reprezentace může být buď v názvu, nebo nadřazená hodnota konstanty výčtu. Všimněte si, že analýzy metody úspěšně převést řetězcové vyjádření čísla, která nejsou členy na konkrétní výčet, pokud řetězce můžete převést na hodnotu podkladovým typem výčtu. Chcete-li tomu zabránit, IsDefined nelze volat metodu pro zajištění výsledek analýzy metody hodnotu výčtu platná. Tento příklad ukazuje tento přístup a ukazuje volání do obou Parse(Type, String) a Enum.TryParse<TEnum>(String, TEnum) metody. Všimněte si, že metoda analýzy neobecnou vrátí objekt, který může být nutné přetypování (v C#) nebo převést na typ odpovídající – výčet (v jazyce Visual Basic).

string number = "-1";
string name = "Early";

try {
   ArrivalStatus status1 = (ArrivalStatus) Enum.Parse(typeof(ArrivalStatus), number);
   if (!(Enum.IsDefined(typeof(ArrivalStatus), status1)))
      status1 = ArrivalStatus.Unknown;
   Console.WriteLine("Converted '{0}' to {1}", number, status1);
}
catch (FormatException) {
   Console.WriteLine("Unable to convert '{0}' to an ArrivalStatus value.", 
                     number);
}   

ArrivalStatus status2;
if (Enum.TryParse<ArrivalStatus>(name, out status2)) {
   if (!(Enum.IsDefined(typeof(ArrivalStatus), status2)))
      status2 = ArrivalStatus.Unknown;
   Console.WriteLine("Converted '{0}' to {1}", name, status2);
}
else {
   Console.WriteLine("Unable to convert '{0}' to an ArrivalStatus value.", 
                     number);
}
// The example displays the following output:
//       Converted '-1' to Late
//       Converted 'Early' to Early

Hodnoty výčtu můžete převést na jejich řetězcové vyjádření voláním statické Format Metoda, jakož i přetížení instance ToString Metoda. Řetězec formátu slouží k řízení způsobu přesné, ve kterém je určený hodnotou výčtu jako řetězec. Další informace naleznete v tématu Vytvoření výčtu řetězců formátu. Následující příklad používá každou z podporovaných výčet řetězců formátu ("G" nebo "g", "D" nebo "d", "X" nebo "x" a "F" nebo "f") převést členem ArrivalStatus výčtu k jeho řetězcové vyjádření.

string[] formats= { "G", "F", "D", "X"};
ArrivalStatus status = ArrivalStatus.Late;
foreach (var fmt in formats)
   Console.WriteLine(status.ToString(fmt));

// The example displays the following output:
//       Late
//       Late
//       -1
//       FFFFFFFF

Enum Typ neimplementuje IEnumerable nebo IEnumerable<T> rozhraní, což vám umožní iteraci členy kolekce pomocí foreach (v jazyku C#) nebo For Each (v jazyce Visual Basic) vytvořit. Můžete však vytvořit výčet členů v některém ze dvou způsobů.

  • Můžete volat GetNames Metoda k načtení pole řetězců obsahující názvy členů výčtu. Pro každý element pole řetězců, dále můžete volat Parse Metoda převést řetězec na jeho hodnota ekvivalentní výčtu. Tento postup znázorňuje následující příklad.

    string[] names = Enum.GetNames(typeof(ArrivalStatus));
    Console.WriteLine("Members of {0}:", typeof(ArrivalStatus).Name);
    Array.Sort(names);
    foreach (var name in names) {
       ArrivalStatus status = (ArrivalStatus) Enum.Parse(typeof(ArrivalStatus), name);
       Console.WriteLine("   {0} ({0:D})", status);
    }
    // The example displays the following output:
    //       Members of ArrivalStatus:
    //          Early (1)
    //          Late (-1)
    //          OnTime (0)
    //          Unknown (-3)      
    
  • Můžete volat GetValues Metoda k načtení pole, které obsahuje základní hodnoty ve výčtu. Pro každý element pole, v dalším kroku můžete volat ToObject Metoda převést na celé číslo na jeho hodnota ekvivalentní výčtu. Tento postup znázorňuje následující příklad.

    var values = Enum.GetValues(typeof(ArrivalStatus));
    Console.WriteLine("Members of {0}:", typeof(ArrivalStatus).Name);
    foreach (var value in values) {
       ArrivalStatus status = (ArrivalStatus) Enum.ToObject(typeof(ArrivalStatus), value);
       Console.WriteLine("   {0} ({0:D})", status);
    }                                       
    // The example displays the following output:
    //       Members of ArrivalStatus:
    //          OnTime (0)
    //          Early (1)
    //          Unknown (-3)
    //          Late (-1)
    

Jeden běžně používá výčtu je představují sadu vzájemně se vylučuje hodnoty. Například ArrivalStatus instance může mít hodnotu Early, OnTime, nebo Late. Nemá smysl pro hodnotu ArrivalStatus instanci tak, aby odrážela více než jeden konstanta výčtu.

V ostatních případech ale hodnotu objektu – výčet může obsahovat více členů výčtu a každý člen představuje pole bitů v hodnota výčtu. FlagsAttribute Atribut slouží k označení, že výčtu se skládá z bitových polí. Například výčtu s názvem Pets může použít k označení druhy mazlíčků v domácnost. Může být definováno následujícím způsobem.

[Flags] public enum Pets { None=0, Dog=1, Cat=2, Bird=4, Rodent=8,
                           Reptile=16, Other=32 };

Pets Výčtu lze poté využít, jak je znázorněno v následujícím příkladu.

Pets familyPets = Pets.Dog | Pets.Cat;
Console.WriteLine("Pets: {0:G} ({0:D})", familyPets);
// The example displays the following output:
//       Pets: Dog, Cat (3)      

Následující osvědčené postupy by měly být používá při definování bitové výčet a použití FlagsAttribute atribut.

  • Použití FlagsAttribute vlastních atributů pro výčet jenom v případě, že bitová operace (AND, OR a výhradní nebo) je třeba provést na číselnou hodnotu.

  • Definujte konstanty výčtu v zajišťuje dva, to znamená, 1, 2, 4, 8 a tak dále. To znamená, že se nepřekrývají jednotlivé příznaky v kombinované výčtu konstanty.

  • Zvažte vytvoření Vypočtená konstanta pro běžně používané příznak kombinace. Například pokud máte výčet používaných pro vstupně-výstupní operace, který obsahuje konstanty výčtu Read = 1 a Write = 2, zvažte vytvoření výčtové konstanta ReadWrite = Read OR Write, které kombinuje Read a Write příznaky. Kromě toho bitové operace OR, který je použita kombinovat příznaků může považovat za k pokročilé koncept v některých případech, které by neměly být požadovány pro jednoduché úlohy.

  • Pokud definujete záporné číslo jako konstanta výčtové příznak vzhledem k tomu, že mnoho pozic příznak může být nastaveno na hodnotu 1, který může byl váš kód matoucí a podporovat chyby kódování postupujte opatrně.

  • Pohodlný způsob, jak otestovat, zda je nastaven příznak číselnou hodnotu, je volat instance HasFlag Metoda, jak je znázorněno v následujícím příkladu.

    Pets familyPets = Pets.Dog | Pets.Cat;
    if (familyPets.HasFlag(Pets.Dog))
       Console.WriteLine("The family has a dog.");
    // The example displays the following output:
    //       The family has a dog.      
    

    Je ekvivalentní k provedení bitové operace AND mezi číselnou hodnotu a výčtový konstantu příznak, který nastaví všechny bity v číselnou hodnotu na hodnotu nula, které neodpovídají příznak, a poté zjišťuje, zda je výsledek této operace je rovna Výčtový konstanta příznak. To je znázorněno v následujícím příkladu.

    Pets familyPets = Pets.Dog | Pets.Cat;
    if ((familyPets & Pets.Dog) == Pets.Dog)
       Console.WriteLine("The family has a dog.");
    // The example displays the following output:
    //       The family has a dog.      
    
  • Použití None jsou název příznak uvedené konstanta, jehož hodnota je nulová. Nelze použít None Konstanta výčtu ve bitové operace AND k testování pro příznak, protože výsledek je vždy nula. Však můžete provádět logické, není bitové, porovnání mezi číselnou hodnotu a None výčtové konstanta k určení, zda jsou nastaveny všechny bity v číselná hodnota. To je znázorněno v následujícím příkladu.

    Pets familyPets = Pets.Dog | Pets.Cat;
    if (familyPets == Pets.None)
       Console.WriteLine("The family has no pets.");
    else
       Console.WriteLine("The family has pets.");   
    // The example displays the following output:
    //       The family has pets.      
    
  • Nedefinují hodnotou výčtu výhradně pro zrcadlení stav výčtu sám sebe. Například nedefinují výčtové konstanta, která jenom označuje konec výčtu. Pokud potřebujete zjistit poslední hodnotu výčtu, vyhledejte explicitně tuto hodnotu. Kromě toho může provádět kontrolu rozsahu pro první a poslední výčtové konstanta, pokud jsou platné všechny hodnoty v rozsahu.

Protože výčtové typy jsou definovány struktury jazyka, jako například enum (C#) a Enum (Visual Basic), nelze definovat vlastní metody pro typ výčtu než těch metod zděděno z Enum třídy. Však můžete rozšiřující metody pro přidání funkce do konkrétní výčtu typu.

V následujícím příkladu Grades výčtu představuje možné známky které student mohou zobrazit v třídě. Metody rozšíření s názvem Passing je přidán do Grades zadejte tak, aby každá instance tohoto typu teď "ví" zda představuje úrovni předávání nebo ne. Extensions Třída také obsahuje statické proměnné pro čtení a zápis, která definuje úrovni minimální předávání. Vrátí hodnotu, která Passing Metoda rozšíření odráží aktuální hodnotu této proměnné.

using System;

// Define an enumeration to represent student grades.
public enum Grades { F = 0, D = 1, C = 2, B = 3, A = 4 };

// Define an extension method for the Grades enumeration.
public static class Extensions
{        
  public static Grades minPassing = Grades.D;

  public static bool Passing(this Grades grade)
  {
      return grade >= minPassing;
  }
}

class Example
{       
  static void Main()
  {
      Grades g1 = Grades.D;
      Grades g2 = Grades.F;
      Console.WriteLine("{0} {1} a passing grade.", g1, g1.Passing() ? "is" : "is not");
      Console.WriteLine("{0} {1} a passing grade.", g2, g2.Passing() ? "is" : "is not");

      Extensions.minPassing = Grades.C;
      Console.WriteLine("\nRaising the bar!\n");
      Console.WriteLine("{0} {1} a passing grade.", g1, g1.Passing() ? "is" : "is not");
      Console.WriteLine("{0} {1} a passing grade.", g2, g2.Passing() ? "is" : "is not");
  }
}
// The exmaple displays the following output:
//       D is a passing grade.
//       F is not a passing grade.
//       
//       Raising the bar!
//       
//       D is not a passing grade.
//       F is not a passing grade.

Následující příklad ukazuje použití výčet představující pojmenovaných hodnot a jiném výčtu představující pojmenované bitových polí.

using System;

public class EnumTest {
    enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
    enum BoilingPoints { Celsius = 100, Fahrenheit = 212 };
    [FlagsAttribute]
    enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };

    public static void Main() {

        Type weekdays = typeof(Days);
        Type boiling = typeof(BoilingPoints);

        Console.WriteLine("The days of the week, and their corresponding values in the Days Enum are:");

        foreach ( string s in Enum.GetNames(weekdays) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( weekdays, Enum.Parse(weekdays, s), "d"));

        Console.WriteLine();
        Console.WriteLine("Enums can also be created which have values that represent some meaningful amount.");
        Console.WriteLine("The BoilingPoints Enum defines the following items, and corresponding values:");

        foreach ( string s in Enum.GetNames(boiling) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format(boiling, Enum.Parse(boiling, s), "d"));

        Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;
        Console.WriteLine();
        Console.WriteLine("myColors holds a combination of colors. Namely: {0}", myColors);
    }
}

Univerzální platforma Windows
K dispozici od 8
.NET Framework
K dispozici od 1.1
Přenosná knihovna tříd
Podporováno v: přenosné platformy .NET
Silverlight
K dispozici od 2.0
Windows Phone Silverlight
K dispozici od 7.0
Windows Phone
K dispozici od 8.1

Tento typ je vláknově bezpečný.

Zpět na začátek
Zobrazit: