Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Enumerationstyp (oder Enumerationstyp) ist ein Werttyp , der durch einen Satz benannter Konstanten des zugrunde liegenden integralen numerischen Typs definiert wird. Verwenden Sie zum Definieren eines Enumerationstyps das enum
Schlüsselwort, und geben Sie die Namen der Enumerationselemente an:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
Standardmäßig sind die zugehörigen Konstantenwerte von Aufzählungselementen vom Typ int
; sie beginnen mit Null und nehmen im Textverlauf der Definition um eins zu. Sie können einen beliebigen anderen integralen numerischen Typ explizit als zugrunde liegenden Typ eines Enumerationstyps angeben. Sie können auch explizit die zugeordneten Konstantenwerte angeben, wie das folgende Beispiel zeigt:
enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
Sie können keine Methode innerhalb der Definition eines Enumerationstyps definieren. Um einem Enumerationstyp Funktionen hinzuzufügen, erstellen Sie eine Erweiterungsmethode.
Der Standardwert eines Enumerationstyps E
ist der wert, der vom Ausdruck (E)0
erzeugt wird, auch wenn null nicht über das entsprechende Enumerationselement verfügt.
Sie verwenden einen Enumerationstyp, um eine Auswahl aus einer Reihe sich gegenseitig ausschließenden Werten oder einer Kombination von Auswahlmöglichkeiten darzustellen. Um eine Kombination von Auswahlmöglichkeiten darzustellen, definieren Sie einen Enumerationstyp als Bitkennzeichnungen.
Enumerationstypen als Bitflags
Wenn ein Enumerationstyp eine Kombination aus Auswahlmöglichkeiten darstellen soll, definieren Sie Enumerationsmember für diese Auswahlmöglichkeiten, sodass eine einzelne Auswahl ein Bitfeld ist. Das heißt, die zugeordneten Werte dieser Enumerationsmember sollten Zweierpotenzen sein. Anschließend können Sie die bitweisen logischen Operatoren |
oder &
verwenden, um Auswahlmöglichkeiten bzw. Schnittmengen von Auswahlmöglichkeiten zu kombinieren. Um anzugeben, dass ein Enumerationstyp Bitfelder deklariert, wenden Sie das Attribut "Flags " darauf an. Wie im folgenden Beispiel gezeigt, können Sie auch einige typische Kombinationen in die Definition eines Enumerationstyps einschließen.
[Flags]
public enum Days
{
None = 0b_0000_0000, // 0
Monday = 0b_0000_0001, // 1
Tuesday = 0b_0000_0010, // 2
Wednesday = 0b_0000_0100, // 4
Thursday = 0b_0000_1000, // 8
Friday = 0b_0001_0000, // 16
Saturday = 0b_0010_0000, // 32
Sunday = 0b_0100_0000, // 64
Weekend = Saturday | Sunday
}
public class FlagsEnumExample
{
public static void Main()
{
Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
Console.WriteLine(meetingDays);
// Output:
// Monday, Wednesday, Friday
Days workingFromHomeDays = Days.Thursday | Days.Friday;
Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
// Output:
// Join a meeting by phone on Friday
bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
// Output:
// Is there a meeting on Tuesday: False
var a = (Days)37;
Console.WriteLine(a);
// Output:
// Monday, Wednesday, Saturday
}
}
Weitere Informationen und Beispiele finden Sie auf der System.FlagsAttribute API-Referenzseite sowie im Abschnitt „Nicht-exklusive Mitglieder und das Flags-Attribut“ der System.Enum API-Referenzseite.
Der System.Enum-Typ und die enum-Einschränkung
Der System.Enum Typ ist die abstrakte Basisklasse aller Enumerationstypen. Es stellt eine Reihe von Methoden zum Abrufen von Informationen zu einem Enumerationstyp und dessen Werten bereit. Weitere Informationen und Beispiele finden Sie auf der System.Enum API-Referenzseite.
Sie können in einer Basisklasseneinschränkung (die als System.Enum
bezeichnet wird) verwenden, um anzugeben, dass ein Typparameter ein Enumerationstyp ist. Jeder Enumerationstyp erfüllt auch die struct
Einschränkung, die verwendet wird, um anzugeben, dass ein Typparameter ein nicht nullabler Werttyp ist.
Konvertierungen
Für jeden Enumerationstyp gibt es explizite Konvertierungen zwischen dem Enumerationstyp und dem zugrunde liegenden integralen Typ. Wenn Sie einen Enumerationswert in den zugrunde liegenden Typ umwandeln , ist das Ergebnis der zugeordnete integrale Wert eines Enumerationselements.
public enum Season
{
Spring,
Summer,
Autumn,
Winter
}
public class EnumConversionExample
{
public static void Main()
{
Season a = Season.Autumn;
Console.WriteLine($"Integral value of {a} is {(int)a}"); // output: Integral value of Autumn is 2
var b = (Season)1;
Console.WriteLine(b); // output: Summer
var c = (Season)4;
Console.WriteLine(c); // output: 4
}
}
Verwenden Sie die Enum.IsDefined Methode, um zu bestimmen, ob ein Enumerationstyp ein Enumerationselement mit dem bestimmten zugeordneten Wert enthält.
Für jeden Enumerationstyp gibt es Boxing- und Unboxing-Konvertierungen in bzw. aus dem System.Enum-Typ.
C#-Sprachspezifikation
Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation:
- Enumerationen
- Enumerationswerte und -vorgänge
- Logische Enumerationsoperatoren
- Enumerationsvergleichsoperatoren
- Explizite Enumerationskonvertierungen
- Implizite Enumerationskonvertierungen