Sdílet prostřednictvím


enum (Referenční dokumentace jazyka C#)

enum Klíčové slovo pro výčet, odlišný typ, který obsahuje sadu pojmenované konstanty nazývá seznam výčet deklarovat.

Obvykle je nejlepší definovat enum přímo v rámci oboru názvů pro všechny třídy v oboru názvů lze přístup se rovná pohodlí.Enum, mohou však také vnořené třídy nebo struct.

Standardně první Čítač má hodnotu 0 a hodnota každé následné čítač se zvyšuje o 1.Například v následujícím výčtu Sat je 0, Sun je 1, Mon je 2, a tak dále.

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

Výčtu pomocí Inicializátory můžete přepsat výchozí hodnoty, jak ukazuje následující příklad.

enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

V tomto výčtu posloupnost prvků nuceni začít z 1 namísto 0.Však je doporučeno včetně konstanta, která má hodnotu 0.Další informace naleznete v tématu Výčtové typy (Průvodce programováním v C#).

Každý typ výčtu má základní typ, který může být libovolný integrálního typu s výjimkou char.Výchozí základní typ výčtu prvků je int.Enum jiného integrálního typu deklarovat jako bajt, pomocí dvojtečky po identifikátoru následovaným typu, jak ukazuje následující příklad.

enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

The approved types for an enum are byte, sbyte, short, ushort, int, uint, long, or ulong.

Proměnná typu Days lze přiřadit libovolnou hodnotu v rozsahu od základního typu; hodnoty nejsou omezeny na pojmenované konstanty.

Výchozí hodnota enum E je hodnota výrazu vyrobené (E)0.

[!POZNÁMKA]

Čítač výčtu nemůže obsahovat mezery v názvu.

Základní typ Určuje, kolik úložiště je přidělena pro jednotlivé čítače výčtu.Explicitní cast je však nezbytné převést z enum typu integrálního typu.Například následující příkaz přiřazuje čítače výčtu Sun proměnné typu int pomocí osazení převést z enum na int.

int x = (int)Days.Sun;

Po použití FlagsAttribute do výčtu obsahující prvky, které lze kombinovat s bitového OR operace, atribut má vliv na chování enum při použití některé nástroje.Všimněte změny, jako například při použití nástrojů Console třídy metody a vyhodnocení výrazu.(Viz třetí příklad).

Robustní programování

Stejně jako u jakékoli konstanta všechny odkazy na jednotlivé hodnoty výčtu převedeny na číselné literály v době kompilace.To můžete vytvořit potenciálních problémů podle Konstanty (Průvodce programováním v C#).

Přiřazení nové verze výčty další hodnoty nebo změnou hodnoty výčtu členů v nové verzi může způsobit problémy u závislých zdrojový kód.Výčtové hodnoty jsou často používány v Přepnout příkazy.Pokud byly přidány další prvky do enum typ výchozího oddílu příkazu switch vyberte neočekávaně.

Pokud vývojáři pomocí kódu, by měly poskytnout pokyny, jak by jejich kód reagovat, pokud nové prvky jsou přidány žádné enum typy.

Příklad

V následujícím příkladu výčet, Days, je deklarována.Dva výčtu jsou explicitně převést na celé číslo a přiřazeny celočíselné proměnné.

public class EnumTest
{
    enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

    static void Main()
    {
        int x = (int)Days.Sun;
        int y = (int)Days.Fri;
        Console.WriteLine("Sun = {0}", x);
        Console.WriteLine("Fri = {0}", y);
    }
}
/* Output:
   Sun = 0
   Fri = 5
*/

V následujícím příkladu se používá typ base možnost prohlásit, enum jejichž členy jsou typu long.Všimněte si, že i když je nadřízený typ výčtu long, výčet členů stále musí explicitně převést na typ long pomocí osazení.

public class EnumTest2
{
    enum Range : long { Max = 2147483648L, Min = 255L };
    static void Main()
    {
        long x = (long)Range.Max;
        long y = (long)Range.Min;
        Console.WriteLine("Max = {0}", x);
        Console.WriteLine("Min = {0}", y);
    }
}
/* Output:
   Max = 2147483648
   Min = 255
*/

Následující příklad kódu ukazuje použití a účinku FlagsAttribute na atribut enum prohlášení.

// Add the attribute Flags or FlagsAttribute.
[Flags]
public enum CarOptions
{
    // The flag for SunRoof is 0001.
    SunRoof = 0x01,
    // The flag for Spoiler is 0010.
    Spoiler = 0x02,
    // The flag for FogLights is 0100.
    FogLights = 0x04,
    // The flag for TintedWindows is 1000.
    TintedWindows = 0x08,
}

class FlagTest
{
    static void Main()
    {
        // The bitwise OR of 0001 and 0100 is 0101.
        CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;

        // Because the Flags attribute is specified, Console.WriteLine displays 
        // the name of each enum element that corresponds to a flag that has 
        // the value 1 in variable options.
        Console.WriteLine(options);
        // The integer value of 0101 is 5.
        Console.WriteLine((int)options);
    }
}
/* Output:
   SunRoof, FogLights
   5
*/

Komentáře

Pokud odeberete Flags, v příkladu se zobrazí následující hodnoty:

5

5

Specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také

Referenční dokumentace

Klíčová slova jazyka C#

Tabulka celočíselných typů (Referenční dokumentace jazyka C#)

Tabulka předdefinovaných typů (Referenční dokumentace jazyka C#)

Tabulka implicitních číselných převodů (Referenční dokumentace jazyka C#)

Tabulka explicitních číselných převodů (Referenční dokumentace jazyka C#)

Koncepty

Výčtové typy (Průvodce programováním v C#)

Další zdroje

Referenční dokumentace jazyka C#