enum (C#-Referenz)enum (C# Reference)

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.The enum keyword is used to declare an enumeration, a distinct type that consists of a set of named constants called the enumerator list.

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.Usually it is best to define an enum directly within a namespace so that all classes in the namespace can access it with equal convenience. Eine Enumeration kann aber auch innerhalb einer Klasse oder einer Struktur geschachtelt werden.However, an enum can also be nested within a class or struct.

Der erste Enumerator hat standardmäßig den Wert 0. Der Wert jedes nachfolgenden Enumerators wird um 1 erhöht.By default, the first enumerator has the value 0, and the value of each successive enumerator is increased by 1. In der folgenden Enumeration gilt z. B.: Sat ist 0, Sun ist 1, Mon ist 2usw.For example, in the following enumeration, Sat is 0, Sun is 1, Mon is 2, and so forth.

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

Enumeratoren können mithilfe von Initialisierern die Standardwerte überschreiben, wie im folgenden Beispiel gezeigt.Enumerators can use initializers to override the default values, as shown in the following example.

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 0beginnt.In this enumeration, the sequence of elements is forced to start from 1 instead of 0. Allerdings wird das Einfügen einer Konstanten mit dem Wert 0 empfohlen.However, including a constant that has the value of 0 is recommended. Weitere Informationen finden Sie unter Enumerationstypen.For more information, see Enumeration Types.

Jeder Enumerationstyp hat einen zugrunde liegenden Typ, bei dem es sich um jeden ganzzahligen Typ außer char handeln kann.Every enumeration type has an underlying type, which can be any integral type except char. Der zugrunde liegende Standardtyp von Enumerationselementen ist int. Um eine Enumeration eines anderen ganzzahligen Typs, z. B. bytezu deklarieren, setzen Sie einen Doppelpunkt hinter dem Bezeichner, auf den der Typ folgt, wie im folgenden Beispiel gezeigt.The default underlying type of enumeration elements is int. To declare an enum of another integral type, such as byte, use a colon after the identifier followed by the type, as shown in the following example.

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, longund ulong.The approved types for an enum are byte, sbyte, short, ushort, int, uint, long, or 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.A variable of type Days can be assigned any value in the range of the underlying type; the values are not limited to the named constants.

Der Standardwert von enum E ist der Wert, der vom Ausdruck (E)0erzeugt wird.The default value of an enum E is the value produced by the expression (E)0.

Hinweis

Namen von Enumeratoren dürfen keine Leerzeichen enthalten.An enumerator cannot contain white space in its name.

Der zugrunde liegende Typ gibt an, wie viel Speicher für jeden Enumerator reserviert wird.The underlying type specifies how much storage is allocated for each enumerator. Eine explizite Typumwandlung ist jedoch erforderlich, um einen enum -Typ in einen ganzzahligen Typ zu konvertieren.However, an explicit cast is necessary to convert from enum type to an integral type. Durch die folgende Anweisung wird der Sun -Enumerator beispielsweise einer Variablen des Typs int zugewiesen. Dabei erfolgt für die Konvertierung von enum in inteine Typumwandlung.For example, the following statement assigns the enumerator Sun to a variable of the type int by using a cast to convert from enum to int.

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.When you apply System.FlagsAttribute to an enumeration that contains elements that can be combined with a bitwise OR operation, the attribute affects the behavior of the enum when it is used with some tools. Solche Änderungen sind bei Verwendung von Tools wie den Methoden der Console -Klasse und der Ausdrucksauswertung zu beobachten.You can notice these changes when you use tools such as the Console class methods and the Expression Evaluator. (Siehe das dritte Beispiel.)(See the third example.)

Stabile ProgrammierungRobust Programming

Wie bei Konstanten werden zur Kompilierzeit alle Verweise auf die einzelnen Werte einer Enumeration in numerische Literale konvertiert.Just as with any constant, all references to the individual values of an enum are converted to numeric literals at compile time. Dies kann, wie unter Konstanten beschrieben, zu möglichen Versionsproblemen führen.This can create potential versioning issues as described in Constants.

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.Assigning additional values to new versions of enums, or changing the values of the enum members in a new version, can cause problems for dependent source code. Enumerationswerte werden oft in switch -Anweisungen verwendet.Enum values often are used in switch statements. Wenn dem enum -Typ weitere Elemente hinzugefügt wurden, kann der Standardabschnitt der „switch“-Anweisung unerwartet ausgewählt werden.If additional elements have been added to the enum type, the default section of the switch statement can be selected unexpectedly.

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.If other developers use your code, you should provide guidelines about how their code should react if new elements are added to any enum types.

BeispielExample

Im folgenden Beispiel wird die Enumeration Daysdeklariert.In the following example, an enumeration, Days, is declared. Zwei Enumeratoren werden explizit in ganze Zahlen konvertiert und „Integer“-Variablen zugewiesen.Two enumerators are explicitly converted to integer and assigned to integer variables.


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
*/

BeispielExample

Im folgenden Beispiel wird die Basistypoption verwendet, um ein enum zu deklarieren, dessen Member den Typ longhaben.In the following example, the base-type option is used to declare an enum whose members are of type long. Beachten Sie, dass obwohl der Enumeration der Typ longzugrunde liegt, die Enumerationsmember noch explizit mithilfe einer Typumwandlung in den Typ long umgewandelt werden müssen.Notice that even though the underlying type of the enumeration is long, the enumeration members still must be explicitly converted to type long by using a cast.

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
*/

BeispielExample

Im folgenden Codebeispiel werden die Verwendung des System.FlagsAttribute -Attributs in einer enum -Deklaration und seine Wirkung veranschaulicht.The following code example illustrates the use and effect of the System.FlagsAttribute attribute on an enum declaration.

// 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
*/

KommentareComments

Wenn Sie Flagsentfernen, werden im Beispiel die folgenden Werte angezeigt:If you remove Flags, the example displays the following values:

5

5

C#-ProgrammiersprachenspezifikationC# Language Specification

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

Siehe auchSee Also

C#-ReferenzC# Reference
EnumerationstypenEnumeration Types
C#-SchlüsselwörterC# Keywords
Tabelle ganzzahliger TypenIntegral Types Table
Tabelle integrierter TypenBuilt-In Types Table
Tabelle für implizite numerische KonvertierungenImplicit Numeric Conversions Table
Tabelle für explizite numerische KonvertierungenExplicit Numeric Conversions Table