web-dev-qa-db-fra.com

quelle est la valeur par défaut pour la variable enum

Une variable enum, tout le monde sait si elle est toujours le premier élément par défaut?

219
user496949

Quel que soit le membre de l'énumération représentant 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.

A titre d'exemple, prenons l'énumération suivante:

enum E
{
    Foo, Bar, Baz, Quux
}

Sans remplacer les valeurs par défaut, l'impression default(E) renvoie Foo puisqu'il s'agit du premier élément.

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 cela:

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

Imprimer default(F) vous donnera Quux et non Foo.

Si aucun des éléments d'une énumération G ne correspond à 0:

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

default(G) retourne littéralement 0, bien que son type reste G (comme indiqué par la documentation ci-dessus, une conversion vers le type enum donné).

353
BoltClock

Je pense qu'il est assez dangereux de s'appuyer sur 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, il suffit d'un refactor imprudent de la commande et vous avez un défaut complètement différent.

9
user3154431