Подтвердить что ты не робот

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

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

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

ВЫВОД
с


Но в Моно
OUTPUT
е

Итак, почему вывод c? не d? Как компилятор выбирает c? Если я изменил код следующим образом:

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


OUTPUT
с
снова!

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

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

OUTPUT
с

4b9b3361

Ответ 1

Из MSDN:

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

Смотрите: http://msdn.microsoft.com/en-us/library/a0h36syw.aspx#Y300

Ответ 2

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