Enumerationen

Ein Enumerationstyp ist ein eindeutiger Werttyp mit einem Satz benannter Konstanten. Sie definieren die Enumerationen, wenn Sie einen Typ definieren müssen, der einen Satz von diskreten Werten haben kann. Die Enumerationen verwenden einen der ganzzahligen Werttypen als ihren zugrunde liegenden Speicher. Sie liefern die Bedeutung der diskreten Werte.

Das folgende Beispiel deklariert und verwendet einen enum-Typ mit dem Namen Color mit drei konstanten Werten, Red, Green und Blue.

using System;
enum Color
{
    Red,
    Green,
    Blue
}
class EnumExample
{
    static void PrintColor(Color color) 
    {
        switch (color) 
        {
            case Color.Red:
                Console.WriteLine("Red");
                break;
            case Color.Green:
                Console.WriteLine("Green");
                break;
            case Color.Blue:
                Console.WriteLine("Blue");
                break;
            default:
                Console.WriteLine("Unknown color");
                break;
        }
    }
    static void Main() 
    {
        Color c = Color.Red;
        PrintColor(c);
        PrintColor(Color.Blue);
    }
}

Jeder enum-Typ verfügt über einen entsprechenden ganzzahligen Typ, der als der zugrunde liegende Typ des enum-Typs bezeichnet wird. Ein enum-Typ, der nicht explizit einen zugrunde liegenden Typ deklariert, verfügt über einen zugrunde liegenden int-Typ. Das Speicherformat eines enum-Typs und der Bereich der möglichen Werte werden durch den ihm zugrunde liegenden Typ bestimmt. Der Satz von Werten, die ein enum-Typ ausführen kann, ist nicht durch seine enum-Member beschränkt. Insbesondere jeder Wert des zugrunde liegenden Typs einer enum kann in den enum-Typ umgewandelt werden und ist ein eindeutiger gültiger Wert dieses enum-Typs.

Das folgende Beispiel deklariert einen enum-Typ mit dem Namen Alignment und einem zugrunde liegenden Typ sbyte.

enum Alignment: sbyte
{
    Left = -1,
    Center = 0,
    Right = 1
}

Wie im vorherigen Beispiel gezeigt, kann eine enum-Memberdeklaration einen konstanten Ausdruck beinhalten, der den Wert des Members angibt. Der konstante Wert für jeden enum-Member muss im Bereich des zugrunde liegenden Typs der enum sein. Wenn eine enum-Memberdeklaration nicht explizit einen Wert angibt, erhält der Member den Wert 0 (null) (falls dies der erste Member im enum-Typ ist) oder den Wert des textlich vorausgehenden enum-Members plus eins.

Enum-Werte können mit Typumwandlungen in ganzzahlige Werte und umgekehrt konvertiert werden. Zum Beispiel:

int i = (int)Color.Blue;    // int i = 2;
Color c = (Color)2;         // Color c = Color.Blue;  

Der Standardwert eines beliebigen enum-Typs ist der ganzzahlige Wert 0 (null) konvertiert in den enum-Typ. In Fällen, in denen Variablen automatisch auf einen Standardwert initialisiert werden, ist dies der Wert der Variablen von enum-Typen. Damit der Standardwert eines enum-Typs leicht verfügbar ist, wird das Literal 0 implizit in einen enum-Typ konvertiert. Daher ist Folgendes zugelassen.

Color c = 0;