enum (C#-Referenz)
Das enum-Schlüsselwort wird zum Deklarieren einer Enumeration verwendet. Dies ist ein eigener Typ, der aus einer Gruppe benannter Konstanten, der so genannten Enumeratorliste, besteht. Jeder Enumerationstyp besitzt einen zugrunde liegenden Typ, bei dem es sich um jeden ganzzahligen Typ außer char handeln kann. Der zugrunde liegende Standardtyp von Enumerationselementen lautet int. Der erste Enumerator hat standardmäßig den Wert 0, und der Wert jedes nachfolgenden Enumerators wird jeweils um 1 erhöht. Beispiel:
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
In dieser Enumeration entspricht Sat dem Wert 0, Sun dem Wert 1, Mon dem Wert 2 usw. Enumeratoren können über Initialisierer verfügen, durch die die Standardwerte überschrieben werden. Beispiel:
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.
Einer Variablen vom Typ Days kann jeder Wert im Bereich des zugrunde liegenden Typs zugewiesen werden. Die Werte sind nicht auf benannte Konstanten eingeschränkt.
Der Standardwert eines enum-E ist der Wert, der durch den Ausdruck (E)0 erzeugt wird.
Hinweis |
|---|
| Ein Enumeratorname darf keine Leerzeichen enthalten. |
Der zugrunde liegende Typ legt fest, wie viel Speicher für jeden Enumerator reserviert wird. Es ist jedoch eine explizite Typumwandlung erforderlich, um einen enum-Typ in einen ganzzahligen Typ zu konvertieren. Durch die folgende Anweisung wird der Sun-Enumerator beispielsweise einer Variablen vom Typ int zugewiesen. Dabei wird für die Konvertierung von enum in int eine Typumwandlung verwendet.
int x = (int)Days.Sun;
Wenn System.FlagsAttribute auf eine Enumeration mit Elementen angewendet wird, die durch eine bitweise OR-Operation verknüpft sind, werden Sie feststellen, dass das Attribut das Verhalten von enum bei der Verwendung bestimmter Tools beeinflusst. Solche Änderungen sind zu beobachten bei der Verwendung von Tools wie den Methoden der Console-Klasse, der Ausdrucksauswertung usw. (Siehe Beispiel 3.)
Das Zuweisen zusätzlicher Werte zu neuen Enumerationsversionen oder das Ändern der Werte von Enumerationsmembern in einer neuen Version kann für abhängigen Code Probleme verursachen. Es ist häufig der Fall, dass enum-Werte in switch-Anweisungen verwendet werden. Wenn dem enum-Typ zusätzliche Elemente hinzugefügt werden, kann der Test für Standardwerte unerwartet true ergeben.
Falls andere Entwickler Ihren Code verwenden, ist es wichtig, Richtlinien bereitzustellen, wie deren Code darauf reagieren soll, wenn irgendeinem enum-Typ neue Elemente hinzugefügt werden.
In diesem Beispiel wird eine Enumeration mit dem Namen Days deklariert. Zwei Enumeratoren werden explizit in ganze Zahlen konvertiert und Ganzzahlen-Variablen zugewiesen.
// keyword_enum.cs
// enum initialization:
using System;
public class EnumTest
{
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
static void Main()
{
int x = (int)Days.Sun;
int y = (int)Days.Fri;
Console.WriteLine("Sun = {0}", x);
Console.WriteLine("Fri = {0}", y);
}
}
Ausgabe
Sun = 2 Fri = 7
In diesem Beispiel wird die Basistypoption verwendet, um ein enum zu deklarieren, dessen Member vom Typ long sind. 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.
// keyword_enum2.cs
// Using long enumerators
using System;
public class EnumTest
{
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);
}
}
Ausgabe
Max = 2147483648 Min = 255
Im folgenden Codebeispiel werden die Verwendung des System.FlagsAttribute Attributs in einer enum-Deklaration und seine Wirkung veranschaulicht.
// enumFlags.cs
// Using the FlagsAttribute on enumerations.
using System;
[Flags]
public enum CarOptions
{
SunRoof = 0x01,
Spoiler = 0x02,
FogLights = 0x04,
TintedWindows = 0x08,
}
class FlagTest
{
static void Main()
{
CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
Console.WriteLine(options);
Console.WriteLine((int)options);
}
}
Ausgabe
SunRoof, FogLights 5
Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:
-
1.10 Enumerationen
-
6.2.2 Explizite Enumerationskonvertierungen
-
14 Enumerationen
Aufgaben
Beispiel für AttributeReferenz
C#-SchlüsselwörterTabelle ganzzahliger Typen (C#-Referenz)
Tabelle integrierter Typen (C#-Referenz)
Tabelle für implizite numerische Konvertierungen (C#-Referenz)
Tabelle für explizite numerische Konvertierungen (C#-Referenz)
Konzepte
C# ProgrammierhandbuchEnumerationsentwurf
Hinweis