Eine Aufzählungsvariable, weiß jemand, ob immer das erste Element standardmäßig verwendet wird?
Eine Aufzählungsvariable, weiß jemand, ob immer das erste Element standardmäßig verwendet wird?
Antworten:
Es ist das Mitglied der Aufzählung, das den Wert darstellt 0
. Insbesondere aus der Dokumentation :
Der Standardwert von a
enum E
ist der vom Ausdruck erzeugte Wert(E)0
.
Nehmen Sie als Beispiel die folgende Aufzählung:
enum E
{
Foo, Bar, Baz, Quux
}
Ohne die Standardwerte zu überschreiben, wird beim Drucken default(E)
zurückgegeben, Foo
da es sich um das erste Element handelt.
Es ist jedoch nicht immer der Fall, dass 0
eine Aufzählung vom ersten Mitglied vertreten wird. Wenn Sie dies beispielsweise tun:
enum F
{
// Give each element a custom value
Foo = 1, Bar = 2, Baz = 3, Quux = 0
}
Drucken default(F)
gibt Ihnen Quux
nicht Foo
.
Wenn keines der Elemente in einer Aufzählung G
entspricht 0
:
enum G
{
Foo = 1, Bar = 2, Baz = 3, Quux = 4
}
default(G)
Gibt buchstäblich zurück 0
, obwohl sein Typ unverändert bleibt G
(wie in den obigen Dokumenten angegeben, eine Umwandlung in den angegebenen Aufzählungstyp).
'\0'
oder default(char)
, was höchst unwahrscheinlich ist, da default(char)
das NUL-Zeichen dem Zeichencode 0 entspricht.
DefaultValue
Attributs - so etwas wie System.ComponentModel.DefaultValue(MyEnum.Blah)
- das Verhalten von ändern würde, default(MyEnum)
aber dennoch 0 ergibt. Gibt es keine Möglichkeit, eine Abstraktion für einen enum
Wert um den Standardwert herum zu erstellen ?
Ich denke, es ist ziemlich gefährlich, sich auf die Reihenfolge der Werte in einer Aufzählung zu verlassen und anzunehmen, dass die erste immer die Standardeinstellung ist. Dies ist eine gute Vorgehensweise, wenn Sie den Standardwert schützen möchten.
enum E
{
Foo = 0, Bar, Baz, Quux
}
Andernfalls ist nur ein nachlässiger Refactor der Bestellung erforderlich, und Sie haben eine völlig andere Standardeinstellung.
Foo
nach Bar
beiden setzen Foo
und Bar
den Wert 0 haben und E.Foo == E.Bar
zurückkehren true
. Es ist so dumm und nicht