Freigeben über


Enumerationstypen (C#-Referenz)

Ein Enumerationstyp (oder Enumerationstyp) ist ein Werttyp , der durch einen Satz benannter Konstanten des zugrunde liegenden integralen numerischen Typs definiert wird. Verwenden Sie zum Definieren eines Enumerationstyps das enum Schlüsselwort, und geben Sie die Namen der Enumerationselemente an:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

Standardmäßig sind die zugehörigen Konstantenwerte von Aufzählungselementen vom Typ int; sie beginnen mit Null und nehmen im Textverlauf der Definition um eins zu. Sie können einen beliebigen anderen integralen numerischen Typ explizit als zugrunde liegenden Typ eines Enumerationstyps angeben. Sie können auch explizit die zugeordneten Konstantenwerte angeben, wie das folgende Beispiel zeigt:

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

Sie können keine Methode innerhalb der Definition eines Enumerationstyps definieren. Um einem Enumerationstyp Funktionen hinzuzufügen, erstellen Sie eine Erweiterungsmethode.

Der Standardwert eines Enumerationstyps E ist der wert, der vom Ausdruck (E)0erzeugt wird, auch wenn null nicht über das entsprechende Enumerationselement verfügt.

Sie verwenden einen Enumerationstyp, um eine Auswahl aus einer Reihe sich gegenseitig ausschließenden Werten oder einer Kombination von Auswahlmöglichkeiten darzustellen. Um eine Kombination von Auswahlmöglichkeiten darzustellen, definieren Sie einen Enumerationstyp als Bitkennzeichnungen.

Enumerationstypen als Bitflags

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. Das heißt, die zugeordneten Werte dieser Enumerationsmember sollten Zweierpotenzen sein. Anschließend können Sie die bitweisen logischen Operatoren | oder & verwenden, um Auswahlmöglichkeiten bzw. Schnittmengen von Auswahlmöglichkeiten zu kombinieren. Um anzugeben, dass ein Enumerationstyp Bitfelder deklariert, wenden Sie das Attribut "Flags " darauf an. Wie im folgenden Beispiel gezeigt, können Sie auch einige typische Kombinationen in die Definition eines Enumerationstyps einschließen.

[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 System.FlagsAttribute API-Referenzseite sowie im Abschnitt „Nicht-exklusive Mitglieder und das Flags-Attribut“ der System.Enum API-Referenzseite.

Der System.Enum-Typ und die enum-Einschränkung

Der System.Enum Typ ist die abstrakte Basisklasse aller Enumerationstypen. Es stellt eine Reihe von Methoden zum Abrufen von Informationen zu einem Enumerationstyp und dessen Werten bereit. Weitere Informationen und Beispiele finden Sie auf der System.Enum API-Referenzseite.

Sie können in einer Basisklasseneinschränkung (die als System.Enum bezeichnet wird) verwenden, um anzugeben, dass ein Typparameter ein Enumerationstyp ist. Jeder Enumerationstyp erfüllt auch die struct Einschränkung, die verwendet wird, um anzugeben, dass ein Typparameter ein nicht nullabler Werttyp ist.

Konvertierungen

Für jeden Enumerationstyp gibt es explizite Konvertierungen zwischen dem Enumerationstyp und dem zugrunde liegenden integralen Typ. Wenn Sie einen Enumerationswert in den zugrunde liegenden Typ umwandeln , ist das Ergebnis der zugeordnete integrale Wert eines Enumerationselements.

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 bestimmen, ob ein Enumerationstyp ein Enumerationselement mit dem bestimmten zugeordneten Wert enthält.

Für jeden Enumerationstyp gibt es Boxing- und Unboxing-Konvertierungen in bzw. aus dem System.Enum-Typ.

C#-Sprachspezifikation

Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation:

Siehe auch