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 E
est 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 Foo
car c'est le premier élément apparaissant.
Cependant, il n'est pas toujours vrai que 0
l'é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 G
correspond à 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.
DefaultValue
attribut - 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 enum
autour 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.
Foo
après la Bar
fois Foo
et Bar
aura une valeur de 0 et E.Foo == E.Bar
reviendrai true
. C'est tellement stupide et contre-intuitif mais c'est vrai :(