Une variable enum, quelqu'un sait si elle est toujours par défaut sur le premier élément?
Une variable enum, quelqu'un sait si elle est toujours par défaut sur le premier élément?
Réponses:
C'est tout membre de l'énumération qui représente la valeur 0. Plus précisément, à partir de la documentation :
La valeur par défaut de an
enum Eest la valeur produite par l'expression(E)0.
À titre d'exemple, prenez l'énumération suivante:
enum E
{
Foo, Bar, Baz, Quux
}
Sans remplacer les valeurs par défaut, l'impression default(E)revient Foocar c'est le premier élément apparaissant.
Cependant, il n'est pas toujours vrai que 0l'énumération est représentée par le premier membre. Par exemple, si vous procédez ainsi:
enum F
{
// Give each element a custom value
Foo = 1, Bar = 2, Baz = 3, Quux = 0
}
L'impression default(F)vous donnera Quux, non Foo.
Si aucun des éléments d'une énumération ne Gcorrespond à 0:
enum G
{
Foo = 1, Bar = 2, Baz = 3, Quux = 4
}
default(G)renvoie littéralement 0, bien que son type reste comme G(comme cité par les documents ci-dessus, une conversion vers le type d'énumération donné).
'\0'ou default(char), ce qui est hautement improbable car default(char)le caractère NUL correspond au code de caractère 0.
DefaultValueattribut - quelque chose comme System.ComponentModel.DefaultValue(MyEnum.Blah)- modifierait le comportement de default(MyEnum)mais il donne toujours 0. N'y a-t-il aucun moyen de créer une abstraction pour un enumautour de sa valeur par défaut?
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 souhaitez protéger la valeur par défaut.
enum E
{
Foo = 0, Bar, Baz, Quux
}
Sinon, tout ce qu'il faut, c'est un refactor imprudent de la commande et vous avez un défaut complètement différent.
Fooaprès la Barfois Fooet Baraura une valeur de 0 et E.Foo == E.Barreviendrai true. C'est tellement stupide et contre-intuitif mais c'est vrai :(