2011-02-11 7 views
179

Une variable enum, quelqu'un sait s'il est toujours par défaut au premier élément?quelle est la valeur par défaut de la variable enum

+1

Une considération pour le cas d'utilisation où une énumération par défaut est souhaitée est d'utiliser une variable nullable. Quand une valeur nulle est reçue, elle peut être traduite dans la partie correcte du code dans la valeur par défaut, et cette valeur par défaut n'a pas à être connue dans le reste du code (qui passe juste le long d'une valeur nulle). – ErikE

Répondre

287

C'est le membre de l'énumération qui représente la valeur 0. Plus précisément, à partir de la documentation:

La valeur par défaut d'un enum E est la valeur produite par l'expression (E)0.

À titre d'exemple, prendre la ENUM suivante:

enum E 
{ 
    Foo, Bar, Baz, Quux 
} 

sans écraser les valeurs par défaut, l'impression default(E) retours Foo car il est l'élément apparaissant en premier.

Cependant, il est pas toujours le cas où 0 d'une énumération est représenté par le premier membre. Par exemple, si vous faites ceci:

enum F 
{ 
    // Give each element a custom value 
    Foo = 1, Bar = 2, Baz = 3, Quux = 0 
} 

impression default(F) vous donnera Quux, non Foo.

Si aucun des éléments dans un ENUM G correspondent à 0:

enum G 
{ 
    Foo = 1, Bar = 2, Baz = 3, Quux = 4 
} 

default(G) retours littéralement 0, bien que son type demeure G (cité par les ci-dessus docs, un casting de type ENUM donné).

+1

Merci, et qu'en est-il des enums définis avec char au lieu de int. par exemple. enum Statut {Actif = 'A', Inactif = 'I'} –

+2

@Fernando Torres: Toujours 0, sauf si l'une de vos valeurs enum correspond à ''\ 0'' ou' default (char) ', ce qui est hautement improbable depuis 'default (char)' est le caractère NUL qui correspond au code char 0. – BoltClock

+0

I (incorrectement?) supposait que l'utilisation de l'attribut 'DefaultValue' - quelque chose comme' System.ComponentModel.DefaultValue (MyEnum.Blah) '--would modifier le comportement de 'default (MyEnum)' mais il donne encore 0. N'y a-t-il aucun moyen de créer une abstraction pour un 'enum' autour de sa valeur par défaut? –

7

Je pense qu'il est assez dangereux de se fier à l'ordre des valeurs dans une énumération et de supposer que la première est toujours la valeur par défaut. Ce serait une bonne pratique si vous êtes préoccupé par la protection de la valeur par défaut.

enum E 
{ 
    Foo = 0, Bar, Baz, Quux 
} 

Sinon, il suffit d'un refactoring négligent de l'ordre et vous avez un défaut complètement différent.

Questions connexes