Typy výčtů (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. Pokud chcete definovat typ výčtu, použijte enum 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í o jeden z následujících pořadí textu definice. Můžete explicitně zadat jakýkoli jiný celočíselný číselný typ jako základní typ výčtu. 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. Pokud chcete přidat funkce do typu výčtu, vytvořte metodu rozšíření.

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.

K vyjádření výběru ze sady vzájemně se vylučujících hodnot nebo kombinace voleb použijete typ výčtu. 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 bitovým polem. To znamená, že přidružené hodnoty těchto členů výčtu by měly být pravomoci dvou. Pak můžete použít bitové logické operátory | nebo & kombinovat volby nebo protínejte kombinace voleb. Chcete-li označit, že typ výčtu deklaruje bitová pole, použijte u 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 reference k rozhraní API a nevýlučné členy a část atributu Flags na System.Enum stránce odkazu 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 jeho hodnotách. Další informace a příklady najdete na System.Enum stránce referenčních informací k 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 typ hodnoty bez null.

Převody

U jakéhokoli typu výčtu existují explicitní převody mezi typem výčtu a 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 boxů a oddělování do a z System.Enum typu.

specifikace jazyka C#

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

Viz také