Как С# определяет, какое значение перечисления как возвращаемое? Любые правила?

Я нашел очень интересную вещь - скажем:

 enum Myenum { a, b, c= 0 }
    public class Program
    {
        static void Main(string[] args)
        {
            Myenum ma = Myenum.a;
            Console.WriteLine(ma);
        }
    }

Результат a, почему?

И если я скажу:

 enum Myenum { a, b=0, c}
    public class Program
    {
        static void Main(string[] args)
        {
            Myenum ma = Myenum.a;
            Console.WriteLine(ma);
        }
    }

Результат будет "b", почему?

Ответ 1

Из Enum.ToString:

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

Связано: enum.ToString возвращает неправильное значение?

Итак, я бы присвоил уникальные значения, если вы wannt полагаться на имя:

enum Myenum { hello = 1, world = 2, qiang = 3 }