с# вывод данных из enum отличается по типу значения элемента в enum (четное/нечетное)

enum Days
{
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday = 2,
    Saturday
}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Days.Sunday);
        Console.WriteLine(Days.Monday);
        Console.WriteLine(Days.Tuesday);
        Console.WriteLine(Days.Wednesday);
        Console.WriteLine(Days.Thursday);
        Console.WriteLine(Days.Friday);
        Console.WriteLine(Days.Saturday);
    }
}

Не могу понять, почему, если элементу Friday присваивать номер без остатка (0, 2, 4), то элемент c таким же номером заменяется на Friday, а если с остатком (1, 3), то само Friday заменятся на элемент с таким же номером.

Например:

при Friday = 2 Console.WriteLine(Days.Tuesday) принимает значение Friday;

при Friday = 1 Console.WriteLine(Days.Friday) принимает значение Monday;

Это особенность enum?


Ответы (1 шт):

Автор решения: CrazyElf

Фактически вы присваиваете двум элементам перечисления одинаковые значения. В этом случае вы получите неопределённое поведение при печати этих элементов:

enum Days
{
    Sunday = 0,
    Monday = 1,
    Tuesday = 2, // = Friday
    Wednesday = 3,
    Thursday = 4,
    Friday = 2, // = Tuesday
    Saturday = 5,
}

Вообще в этом случае должно выходить предупреждение. Не делайте так. Максимум что можно сделать, если вам такое действительно нужно, это явное присвоение ранее определённого элемента:

enum Days
{
    Sunday = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = Tuesday,
    Saturday = 5,
}

Но в любом случае если элементы равны, то они одинаковы, и какая для вас разница, какой из них будет напечатан?

→ Ссылка