enum
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

enum (C#-Referenz)

 

Das Schlüsselwort enum wird zum Deklarieren einer Enumeration verwendet. Dies ist ein eigener Typ, der aus einer Gruppe benannter Konstanten besteht, die Enumeratorliste genannt wird.

In der Regel ist es am besten, eine Enumeration direkt innerhalb eines Namespaces so zu definieren, dass alle Klassen im Namespace auf gleiche Weise darauf zugreifen können. Eine Enumeration kann aber auch innerhalb einer Klasse oder einer Struktur geschachtelt werden.

Der erste Enumerator hat standardmäßig den Wert 0. Der Wert jedes nachfolgenden Enumerators wird um 1 erhöht. In der folgenden Enumeration gilt z. B.: Sat ist 0, Sun ist 1, Mon ist 2 usw.


enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

Enumeratoren können mithilfe von Initialisierern die Standardwerte überschreiben, wie im folgenden Beispiel gezeigt.


enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

In dieser Enumeration wird erzwungen, dass die Abfolge von Elementen mit 1 und nicht mit 0 beginnt. Allerdings wird das Einfügen einer Konstanten mit dem Wert 0 empfohlen. Weitere Informationen finden Sie unter Enumerationstypen (C#-Programmierhandbuch).

Jeder Enumerationstyp hat einen zugrunde liegenden Typ, bei dem es sich um jeden ganzzahligen Typ außer char handeln kann. Der zugrunde liegende Standardtyp von Enumerationselementen ist int. Um eine Enumeration eines anderen ganzzahligen Typs, z. B. byte zu deklarieren, setzen Sie einen Doppelpunkt hinter dem Bezeichner, auf den der Typ folgt, wie im folgenden Beispiel gezeigt.


enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

Die zulässigen Typen für eine Enumeration sind byte, sbyte, short, ushort, int, uint, long und ulong.

Einer Variablen des Typs Days kann jeder Wert im Werbebereich des zugrunde liegenden Typs zugewiesen werden. Die Werte sind nicht auf benannte Konstanten beschränkt.

Der Standardwert von enum E ist der Wert, der vom Ausdruck (E)0 erzeugt wird.

System_CAPS_noteHinweis

Namen von Enumeratoren dürfen keine Leerzeichen enthalten.

Der zugrunde liegende Typ gibt an, wie viel Speicher für jeden Enumerator reserviert wird. Eine explizite Typumwandlung ist jedoch erforderlich, um einen enum-Typ in einen ganzzahligen Typ zu konvertieren. Durch die folgende Anweisung wird der Sun-Enumerator beispielsweise einer Variablen des Typs int zugewiesen. Dabei erfolgt für die Konvertierung von enum in int eine Typumwandlung.


int x = (int)Days.Sun;

Wenn System.FlagsAttribute auf eine Enumeration mit Elementen angewendet wird, die mit einer bitweisen OR-Operation kombiniert werden können, beeinflusst das Attribut das Verhalten von enum bei der Verwendung bestimmter Tools. Solche Änderungen sind bei Verwendung von Tools wie den Methoden der Console-Klasse und der Ausdrucksauswertung zu beobachten. (Siehe das dritte Beispiel.)

Wie bei Konstanten werden zur Kompilierzeit alle Verweise auf die einzelnen Werte einer Enumeration in numerische Literale konvertiert. Dies kann, wie unter Konstanten (C#-Programmierhandbuch) beschrieben, zu möglichen Versionsproblemen führen.

Das Zuweisen zusätzlicher Werte zu neuen Enumerationsversionen oder das Ändern der Werte von Enumerationsmembern in einer neuen Version kann für abhängigen Quellcode Probleme verursachen. Enumerationswerte werden oft in switch-Anweisungen verwendet. Wenn dem enum-Typ weitere Elemente hinzugefügt wurden, kann der Standardabschnitt der „switch“-Anweisung unerwartet ausgewählt werden.

Falls andere Entwickler Ihren Code verwenden, sollten Sie Richtlinien festlegen, die angeben, wie deren Code reagieren soll, wenn enum-Typen neue Elemente hinzugefügt werden.

Beispiel

Im folgenden Beispiel wird die Enumeration Days deklariert. Zwei Enumeratoren werden explizit in ganze Zahlen konvertiert und „Integer“-Variablen zugewiesen.


public class EnumTest
{
    enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

    static void Main()
    {
        int x = (int)Days.Sun;
        int y = (int)Days.Fri;
        Console.WriteLine("Sun = {0}", x);
        Console.WriteLine("Fri = {0}", y);
    }
}
/* Output:
   Sun = 0
   Fri = 5
*/

Beispiel

Im folgenden Beispiel wird die Basistypoption verwendet, um ein enum zu deklarieren, dessen Member den Typ long haben. Beachten Sie, dass obwohl der Enumeration der Typ long zugrunde liegt, die Enumerationsmember noch explizit mithilfe einer Typumwandlung in den Typ long umgewandelt werden müssen.

public class EnumTest2
{
    enum Range : long { Max = 2147483648L, Min = 255L };
    static void Main()
    {
        long x = (long)Range.Max;
        long y = (long)Range.Min;
        Console.WriteLine("Max = {0}", x);
        Console.WriteLine("Min = {0}", y);
    }
}
/* Output:
   Max = 2147483648
   Min = 255
*/

Beispiel

Im folgenden Codebeispiel werden die Verwendung des System.FlagsAttribute-Attributs in einer enum-Deklaration und seine Wirkung veranschaulicht.

// Add the attribute Flags or FlagsAttribute.
[Flags]
public enum CarOptions
{
    // The flag for SunRoof is 0001.
    SunRoof = 0x01,
    // The flag for Spoiler is 0010.
    Spoiler = 0x02,
    // The flag for FogLights is 0100.
    FogLights = 0x04,
    // The flag for TintedWindows is 1000.
    TintedWindows = 0x08,
}

class FlagTest
{
    static void Main()
    {
        // The bitwise OR of 0001 and 0100 is 0101.
        CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;

        // Because the Flags attribute is specified, Console.WriteLine displays
        // the name of each enum element that corresponds to a flag that has
        // the value 1 in variable options.
        Console.WriteLine(options);
        // The integer value of 0101 is 5.
        Console.WriteLine((int)options);
    }
}
/* Output:
   SunRoof, FogLights
   5
*/

Wenn Sie Flags entfernen, werden im Beispiel die folgenden Werte angezeigt:

5

5

Weitere Informationen finden Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Anzeigen:
© 2016 Microsoft