Значения типов Enum - PullRequest
       1

Значения типов Enum

28 голосов
/ 26 октября 2011

Мне просто интересно, почему я получаю этот вывод:

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

ВЫХОД
c


Но в Mono
ВЫХОД
f

Так почему же выход c?не г?Как компилятор выбирает c?Если я изменю код следующим образом:

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


ВЫХОД
c
снова!

Другой пример :

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

ВЫХОД
c

Ответы [ 2 ]

36 голосов
/ 26 октября 2011

Из MSDN:

Если несколько членов перечисления имеют одинаковое базовое значение, и вы пытаетесь получить строковое представление имени члена перечисления на основе его базового значения, ваш код не должен делать никаких предположенийо том, какое имя вернет метод.

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

0 голосов
/ 26 октября 2011

Вывод c, потому что ToString разрешает индекс перечисления и распечатывает представление с этим индексом.В первом примере d = 3, а третьим индексированным значением перечисления является c.Аналогично, при поиске третьего индекса для k он достигает c раньше, чем k, так что это снова вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...