28 votes

Valeurs des types Enum

Je me demande pourquoi j'obtiens ce résultat :

enum MyEnum
{
    a=1,
    b=2,
    c=3,
    d=3,
    f=d
}
Console.WriteLine(MyEnum.f.ToString());

SORTIE
c


Mais en Mono
SORTIE
f

Alors, pourquoi est la sortie de la c? pas d? Comment le compilateur de choisir le c? Si je change le code comme ceci:

enum MyEnum
{
    a=1,
    b=2,
    c=3,
    d=3, 
    k=3
}
Console.WriteLine(MyEnum.k.ToString());


SORTIE
c
nouveau!

Un autre exemple:

enum MyEnum
{
    a=3,
    b=3,
    c=3,      
    d=3,
    f=d,   
}
MessageBox.Show(MyEnum.f.ToString());

SORTIE
c

36voto

Daryl Points 538

Depuis MSDN:

Si plusieurs membres d'énumération ont la même valeur sous-jacente et que vous essayez de récupérer la représentation sous forme de chaîne du nom d'un membre d'énumération en fonction de sa valeur sous-jacente, votre code ne doit pas faire d'hypothèses sur le nom que la méthode renverra.

Voir: http://msdn.microsoft.com/en-us/library/a0h36syw.aspx#Y300

0voto

Michael Kingsmill Points 891

La sortie est c car ToString résout l'index de l'énumération et imprime la représentation à cet index. Dans le premier exemple, d = 3, et la troisième valeur énumérée indexée est c. De même, lors de la recherche du troisième indice pour k, il arrive à c avant k, c'est donc à nouveau la sortie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X