EnumerationenEnums

Ein Enumerationstyp ist ein eindeutiger Werttyp mit einem Satz benannter Konstanten.An enum type is a distinct value type with a set of named constants. Sie definieren die Enumerationen, wenn Sie einen Typ definieren müssen, der einen Satz von diskreten Werten haben kann.You define enums when you need to define a type that can have a set of discrete values. Die Enumerationen verwenden einen der ganzzahligen Werttypen als ihren zugrunde liegenden Speicher.They use one of the integral value types as their underlying storage. Sie liefern die Bedeutung der diskreten Werte.They provide semantic meaning to the discrete values.

Das folgende Beispiel deklariert und verwendet einen enum-Typ mit dem Namen Color mit drei konstanten Werten, Red, Green und Blue.The following example declares and uses an enum type named Color with three constant values, Red, Green, and 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.Each enum type has a corresponding integral type called the underlying type of the enum type. Ein enum-Typ, der nicht explizit einen zugrunde liegenden Typ deklariert, verfügt über einen zugrunde liegenden int-Typ.An enum type that does not explicitly declare an underlying type has an underlying type of int. Das Speicherformat eines enum-Typs und der Bereich der möglichen Werte werden durch den ihm zugrunde liegenden Typ bestimmt.An enum type’s storage format and range of possible values are determined by its underlying type. Der Satz von Werten, die ein enum-Typ ausführen kann, ist nicht durch seine enum-Member beschränkt.The set of values that an enum type can take on is not limited by its enum members. 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.In particular, any value of the underlying type of an enum can be cast to the enum type and is a distinct valid value of that enum type.

Das folgende Beispiel deklariert einen enum-Typ mit dem Namen Alignment und einem zugrunde liegenden Typ sbyte.The following example declares an enum type named Alignment with an underlying type of 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.As shown by the previous example, an enum member declaration can include a constant expression that specifies the value of the member. Der konstante Wert für jeden enum-Member muss im Bereich des zugrunde liegenden Typs der enum sein.The constant value for each enum member must be in the range of the underlying type of the enum. 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.When an enum member declaration does not explicitly specify a value, the member is given the value zero (if it is the first member in the enum type) or the value of the textually preceding enum member plus one.

Enum-Werte können mit Typumwandlungen in ganzzahlige Werte und umgekehrt konvertiert werden.Enum values can be converted to integral values and vice versa using type casts. Zum Beispiel:For example:

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.The default value of any enum type is the integral value zero converted to the enum type. In Fällen, in denen Variablen automatisch auf einen Standardwert initialisiert werden, ist dies der Wert der Variablen von enum-Typen.In cases where variables are automatically initialized to a default value, this is the value given to variables of enum types. Damit der Standardwert eines enum-Typs leicht verfügbar ist, wird das Literal 0 implizit in einen enum-Typ konvertiert.In order for the default value of an enum type to be easily available, the literal 0 implicitly converts to any enum type. Daher ist Folgendes zugelassen.Thus, the following is permitted.

Color c = 0;