с# вывод данных из 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 шт):
Фактически вы присваиваете двум элементам перечисления одинаковые значения. В этом случае вы получите неопределённое поведение при печати этих элементов:
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,
}
Но в любом случае если элементы равны, то они одинаковы, и какая для вас разница, какой из них будет напечатан?