Bei einer Enumeration werden Bezeichnern ganzzahlige Werte zugrunde gelegt. Der Standard-Datentyp für diese Werte ist int, es werden aber auch byte, sbyte, short, ushort, uint, long oder ulong verwendet werden. Erstellen wir eine Klasse mit einer Enumerations-Variablen, so wird dieser ein default-Wert zugewiesen. Dieser default-Wert ergibt sich aus dem default-Wert des zugrundeliegenden Datentyps, und das ist bei den für Enumerationen erlaubten Datentypen immer 0. Der default-Wert einer Enumeration ist somit nicht zwingend immer der erste definierte Wert – und auch nicht immer ein valider Enum-Wert!
Um dies zu verdeutlichen, erstellen wir uns mehrere Enumerationen, bei denen den einzelnen Werten unterschiedliche numerische Werte zugrunde gelegt werden.
1: private enum EnumHello
2: {
3: Hello, // wird mit 0 belegt
4: World // wird mit 1 belegt
5: }
6: private enum EnumWorld
7: {
8: Hello = -1,
9: World // wird mit 0 belegt
10: }
Um die Zuweisung von default-Werte zu prüfen, erzeugen wir uns eine Klasse, die jeweils eine Property dieser Enumerationen hält.
1: private class EnumTester
2: {
3: public EnumHello Hello { get; set; }
4: public EnumWorld World { get; set; }
5: }
Erstellen wir nun eine Instanz dieser Klasse und geben danach direkt die den Properties zugewiesene Werte aus, so sehen wir, dass immer der Wert mit dem zugrundeliegenden Wert 0 gesetzt ist.
1: EnumTester test = new EnumTester();
2:
3: Console.WriteLine(string.Format("default EnumHello: {0} ({1})", test.Hello, Enum.GetName(typeof(EnumHello), test.Hello)));
4: Console.WriteLine(string.Format("default EnumWorld: {0} ({1})", test.World, Enum.GetName(typeof(EnumWorld), test.World)));
Doch was passiert nun, wenn wir keinen Enumerationswert zum Wert 0 haben?
Hierzu erstellen wir eine Enumeration, die bei 1 beginnt.
1: private enum EnumUndefined
2: {
3: Hello = 1,
4: World // wird mit 2 belegt
5: }
Die Ausgabe auf der Konsole zeigt, dass dennoch der Wert 0 gesetzt ist, der ermittelte Name aber NULL ist.
Dies sollte bei der Erstellung von Enumerationen berücksichtigt werden. Es macht auch keinen Unterschied, ob wir eine Enumerations-Variable nicht initialisieren, oder den Wert über default(Enumeration) beziehen. Daher auch die Empfehlung von Microsoft, generell ein default-Element mit dem Wert 0 zu erstellt.
Sie sehen gerade einen Platzhalterinhalt von Facebook. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von Instagram. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen