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 Eist 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, Fooda es sich um das erste Element handelt.
Es ist jedoch nicht immer der Fall, dass 0eine 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 Quuxnicht Foo.
Wenn keines der Elemente in einer Aufzählung Gentspricht 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.
DefaultValueAttributs - 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 enumWert 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.
Foonach Barbeiden setzen Foound Barden Wert 0 haben und E.Foo == E.Barzurückkehren true. Es ist so dumm und nicht