Typy výčtu (referenční dokumentace jazyka C#)

Typ výčtu (nebo typ výčtu) je typ hodnoty definovaný sadou pojmenovaných konstant základního celočíselného číselného typu. K definování typu výčtu enum použijte klíčové slovo a zadejte názvy členů výčtu:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

Ve výchozím nastavení jsou přidružené konstantní hodnoty členů výčtu typu int; začínají nulou a zvyšují se o jeden z následujících pořadí textu definice. Jako základní typ výčtu můžete explicitně zadat jakýkoli jiný celočíselný číselný typ. Můžete také explicitně zadat přidružené konstantní hodnoty, jak ukazuje následující příklad:

enum ErrorCode : ushort
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

Nelze definovat metodu uvnitř definice typu výčtu. Chcete-li přidat funkce do typu výčtu, vytvořte rozšiřující metodu.

Výchozí hodnota typu E výčtu je hodnota vytvořená výrazem (E)0, i když nula nemá odpovídající člen výčtu.

Typ výčtu slouží k vyjádření výběru ze sady vzájemně se vylučujících hodnot nebo kombinace voleb. Chcete-li reprezentovat kombinaci voleb, definujte typ výčtu jako bitové příznaky.

Typy výčtu jako příznaky bitů

Pokud chcete, aby typ výčtu představoval kombinaci voleb, definujte členy výčtu pro tyto volby tak, aby jednotlivá volba byla bit pole. To znamená, že přidružené hodnoty těchto členů výčtu by měly být pravomoci dvou. Potom můžete použít bitové logické operátory | nebo & kombinovat volby nebo protínají kombinace voleb. Chcete-li označit, že typ výčtu deklaruje bitová pole, použijte na něj atribut Flags . Jak ukazuje následující příklad, můžete také zahrnout některé typické kombinace v definici typu výčtu.

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}

Další informace a příklady najdete na System.FlagsAttribute stránce s referenčními informacemi k rozhraní API a nevýlučné členy a v části Atribut Flags na System.Enum stránce reference k rozhraní API.

Typ System.Enum a omezení výčtu

Typ System.Enum je abstraktní základní třída všech typů výčtu. Poskytuje řadu metod pro získání informací o typu výčtu a jejích hodnotách. Další informace a příklady najdete na System.Enum referenční stránce rozhraní API.

V omezení základní třídy (označované jako omezení výčtu) můžete určitSystem.Enum, že parametr typu je typ výčtu. Jakýkoli typ výčtu struct také splňuje omezení, které se používá k určení, že parametr typu je nenulový typ hodnoty.

Převody

Pro jakýkoli typ výčtu existují explicitní převody mezi typem výčtu a jeho základním celočíselným typem. Pokud přetypujete hodnotu výčtu na její základní typ, výsledek je přidružená celočíselnou hodnotu člena výčtu.

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

public class EnumConversionExample
{
    public static void Main()
    {
        Season a = Season.Autumn;
        Console.WriteLine($"Integral value of {a} is {(int)a}");  // output: Integral value of Autumn is 2

        var b = (Season)1;
        Console.WriteLine(b);  // output: Summer

        var c = (Season)4;
        Console.WriteLine(c);  // output: 4
    }
}

Enum.IsDefined Pomocí metody určete, zda typ výčtu obsahuje člen výčtu s určitou přidruženou hodnotou.

Pro jakýkoli typ výčtu existují převody boxingu a rozbalení do a z System.Enum daného typu.

specifikace jazyka C#

Další informace najdete v následujících částech specifikace jazyka C#:

Viz také