Значения типов 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
с
Ответы
Ответ 1
Из MSDN:
Если несколько элементов перечисления имеют одно и то же базовое значение, и вы попытка получить строковое представление перечисления имя участника на основе его базового значения, ваш код не должен любые предположения о том, какое имя возвращает метод.
Смотрите: http://msdn.microsoft.com/en-us/library/a0h36syw.aspx#Y300
Ответ 2
Вывод c, поскольку ToString разрешает индекс перечисления и выводит представление в этом индексе. В первом примере d = 3, а третье индексированное значение перечисления - c. Аналогично, при поиске третьего индекса для k он достигает c до k, так что это снова выход.