Výčtové typy (Referenční příručka jazyka C#)

Typ výčtu (nebo typ výčtu) je typ hodnoty definovaný pomocí sady pojmenovaných konstant základního integrálního číselného typu. Pokud chcete definovat typ výčtu, použijte klíčové slovo a enum 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 . Začínají nulou a zvyšují se o jednu za int pořadím textu definice. Jako základní typ typu výčtu můžete explicitně zadat jakýkoli jiný celočíselné typy. 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
}

V definici typu výčtu nelze definovat metodu. Pokud chcete přidat funkce do typu výčtu, vytvořte rozšiřující metodu.

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

Typ výčtu slouží k reprezentaci volby ze sady vzájemně se vylučující hodnoty nebo kombinace možností. Chcete-li reprezentovat kombinaci možností, definujte typ výčtu jako bitové příznaky.

Výčtové typy jako bitové příznaky

Pokud chcete, aby typ výčtu reprezentoval kombinaci možností, definujte členy výčtu pro tyto volby tak, aby individuální volba byla bitové pole. To znamená, že přidružené hodnoty těchto výčtových členů by měly být mocnosti dvou členů. Potom můžete použít bitové logické operátory nebo | & kombinovat volby nebo protínají kombinace voleb v uvedeném pořadí. 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 do definice typu výčtu zahrnout také některé typické kombinace.

[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 stránce s referenčními informacemi k rozhraní API, v části Ne exclusive members a v části System.FlagsAttribute Flags attribute (Atributy příznaků) stránky s System.Enum referenčními informacemi 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 jeho hodnotách. Další informace a příklady najdete na stránce s referenčními System.Enum informacemi k rozhraní API.

Počínaje jazykem C# 7.3 můžete v omezení základní třídy (označované jako omezení výčtu) určit, že parametr typu je System.Enum typ výčtu. Jakýkoli typ výčtu také splňuje omezení, které se používá k určení, že parametr typu je hodnotový typ, který nemůže struct mít hodnotu null.

Převody

Pro každý typ výčtu existují explicitní převody mezi typem výčtu a jeho základním celočíselným typem. Pokud hodnotu výčtu přetypováte na její podkladový typ, výsledkem je přidružená celočísová hodnota členu 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
    }
}

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

Pro každý typ výčtu existují převody typu typu do a odbalení. System.Enum

specifikace jazyka C#

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

Viz také