Enumerationstypen (C#-Referenz)Enumeration types (C# reference)

Ein Enumerationstyp (oder enum-Typ) ist ein Werttyp, der durch eine Reihe benannter Konstanten des zugrunde liegenden integralen numerischen Typs definiert wird.An enumeration type (or enum type) is a value type defined by a set of named constants of the underlying integral numeric type. Um einen Enumerationstyp zu definieren, verwenden Sie das enum-Schlüsselwort und geben die Namen von Enumerationsmembern an:To define an enumeration type, use the enum keyword and specify the names of enum members:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

Standardmäßig sind die zugeordneten Konstantenwerte von Enumerationsmembern vom Typ int. Sie beginnen mit null und erhöhen sich um eins gemäß der Definitionstextreihenfolge.By default, the associated constant values of enum members are of type int; they start with zero and increase by one following the definition text order. Sie können einen beliebigen anderen integralen numerischen Typ als zugrunde liegenden Typ eines Enumerationstyps explizit angeben.You can explicitly specify any other integral numeric type as an underlying type of an enumeration type. Sie können auch explizit die zugeordneten Konstantenwerte angeben, wie im folgenden Beispiel gezeigt:You can also explicitly specify the associated constant values, as the following example shows:

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

In der Definition eines Enumerationstyps kann keine Methode definiert werden.You cannot define a method inside the definition of an enumeration type. Zum Hinzufügen von Funktionen zu einem Enumerationstyp erstellen Sie eine Erweiterungsmethode.To add functionality to an enumeration type, create an extension method.

Der Standardwert eines Enumerationstyps E ist der Wert, der vom Ausdruck (E)0 generiert wird, auch wenn NULL nicht über den entsprechenden Enumerationsmember verfügt.The default value of an enumeration type E is the value produced by expression (E)0, even if zero doesn't have the corresponding enum member.

Sie verwenden einen Enumerationstyp, um eine Auswahl aus einer Reihe von sich gegenseitig ausschließenden Werten oder eine Kombination aus Auswahlmöglichkeiten darzustellen.You use an enumeration type to represent a choice from a set of mutually exclusive values or a combination of choices. Um eine Kombination aus Auswahlmöglichkeiten darzustellen, definieren Sie einen Enumerationstyp als Bitflags.To represent a combination of choices, define an enumeration type as bit flags.

Enumerationstypen als BitflagsEnumeration types as bit flags

Wenn ein Enumerationstyp eine Kombination aus Auswahlmöglichkeiten darstellen soll, definieren Sie Enumerationsmember für diese Auswahlmöglichkeiten, sodass eine einzelne Auswahl ein Bitfeld ist.If you want an enumeration type to represent a combination of choices, define enum members for those choices such that an individual choice is a bit field. Das heißt, die zugeordneten Werte dieser Enumerationsmember sollten Zweierpotenzen sein.That is, the associated values of those enum members should be the powers of two. Anschließend können Sie die bitweisen logischen Operatoren | oder & verwenden, um Auswahlmöglichkeiten bzw. Schnittmengen von Auswahlmöglichkeiten zu kombinieren.Then, you can use the bitwise logical operators | or & to combine choices or intersect combinations of choices, respectively. Um anzugeben, dass ein Enumerationstyp Bitfelder deklariert, wenden Sie das Attribut Flags darauf an.To indicate that an enumeration type declares bit fields, apply the Flags attribute to it. Wie im folgenden Beispiel gezeigt, können Sie auch einige typische Kombinationen in die Definition eines Enumerationstyps einschließen.As the following example shows, you can also include some typical combinations in the definition of an enumeration type.

[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
    }
}

Weitere Informationen und Beispiele finden Sie auf der Referenzseite zur System.FlagsAttribute-API und im Abschnitt Nicht exklusive Member und das Flags-Attribut der Referenzseite zur System.Enum-API.For more information and examples, see the System.FlagsAttribute API reference page and the Non-exclusive members and the Flags attribute section of the System.Enum API reference page.

Der System.Enum-Typ und die enum-EinschränkungThe System.Enum type and enum constraint

Der System.Enum-Typ ist die abstrakte Basisklasse aller Enumerationstypen.The System.Enum type is the abstract base class of all enumeration types. Er bietet eine Reihe von Methoden, um Informationen zu einem Enumerationstyp und seinen Werten abzurufen.It provides a number of methods to get information about an enumeration type and its values. Weitere Informationen und Beispiele finden Sie auf der Referenzseite zur System.Enum-API.For more information and examples, see the System.Enum API reference page.

Ab C# 7.3 können Sie System.Enum in einer Basisklasseneinschränkung (die als enum-Einschränkung bezeichnet wird) verwenden, um anzugeben, dass ein Typparameter ein Enumerationstyp ist.Beginning with C# 7.3, you can use System.Enum in a base class constraint (that is known as the enum constraint) to specify that a type parameter is an enumeration type.

KonvertierungenConversions

Für jeden Enumerationstyp gibt es explizite Konvertierungen zwischen dem Enumerationstyp und dem zugrunde liegenden integralen Typ.For any enumeration type, there exist explicit conversions between the enumeration type and its underlying integral type. Wenn Sie einen Enumerationswert in den zugrunde liegenden Typ umwandeln, ist das Ergebnis der zugeordnete integrale Wert eines Enumerationsmembers.If you cast an enum value to its underlying type, the result is the associated integral value of an enum member.

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
    }
}

Verwenden Sie die Enum.IsDefined-Methode, um zu ermitteln, ob ein Enumerationstyp einen Enumerationsmember mit dem bestimmten zugeordneten Wert enthält.Use the Enum.IsDefined method to determine whether an enumeration type contains an enum member with the certain associated value.

Für jeden Enumerationstyp gibt es Boxing- und Unboxing-Konvertierungen in bzw. aus dem System.Enum-Typ.For any enumeration type, there exist boxing and unboxing conversions to and from the System.Enum type, respectively.

C#-SprachspezifikationC# language specification

Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation:For more information, see the following sections of the C# language specification:

Siehe auchSee also