Перечисления в С#

Перечисления в С#

Перечисления в С#

Перечисляемый тип (также называемый перечислением) — это тип данных, состоящий из набора именованных значений. Переменной, перечисляемого типа,
может быть присвоен любой из элементов перечисления в качестве значения, в результате чего код станет более читабельным.

Перечисления определяются с помощью ключевого слова enum.



enum TaskPriority

{

    Low,

    Normal,

    High

}



По умолчанию значения членов перечисления имеют тип int. Они начинаются с нуля и увеличиваются на единицу.
Но для перечисления можно определить и другие типы, включая byte, sbyte, short, ushort, uint, long, и ulong.
Также перечисления создаются в стеке, а не в куче.

Простой пример перечисления C

Ниже приведен простой пример с перечислением.



Day day = Day.Monday;



if (day == Day.Monday)

{

    Console.WriteLine("Это понедельник");

}



Console.WriteLine(day);



// выводим значения членов перечисления

foreach (int i in Enum.GetValues(typeof(Day)))

{

    Console.WriteLine(i);

}



// Создаем перечисление для дней недели.

enum Day

{

    Monday,

    Tuesday,

    Wednesday,

    Thursday,

    Friday,

    Saturday,

    Sunday

}



Тестируем программу в консоли:



$ dotnet run

It is Monday

Monday

0

1

2

3

4

5

6



Также мы можем указать собственные значения для членов перечисления.



foreach (int i in Enum.GetValues(typeof(Day)))

{

    Console.WriteLine(i);

}



enum Day

{

    Monday = 10,

    Tuesday = 11,

    Wednesday = 12,

    Thursday = 13,

    Friday = 14,

    Saturday = 15,

    Sunday = 16

}



В примере мы предоставляем значения от 10 до 16 членам Dayперечисления.



$ dotnet run

10

11

12

13

14

15



Перечисления с типом данных отличных от int

В следующем примере мы изменим тип данных для членов перечисления.



// теперь тип значений не int, а byte

// время года

enum Season : byte

{

    Spring = 1,

    Summer = 2,

    Autumn = 3,

    Winter = 4

}





Season s1 = Season.Spring;

Season s2 = Season.Autumn;



Console.WriteLine(s1);

Console.WriteLine(s2);



Console.WriteLine("#############################################");





Console.WriteLine(s1.GetType()); // тип переменной перечисления

Console.WriteLine(Enum.GetUnderlyingType(s1.GetType())); // тип, лежащий в основе значений перечисления



Выполним в консоли:



$ dotnet run

Spring

Autumn

#############################################

Season

System.Byte



Преобразования перечислений в C

Можно выполнять явные преобразования между типом перечисления и лежащим в его основе целочисленным типом.



enum Priority

{

    Low,

    Normal,

    High

}



var p1 = Priority.Low;



// конвертируем значение перечисления в его целочисленное представление

Console.WriteLine($"Численной значение {p1} равно {(int) p1}");



// конвертируем число в элемент перечисления, соответствующий этому числу

var p2 = (Priority) 1;

Console.WriteLine(p2);



// конвертируем число в элемент перечисления, соответствующий этому числу

var p3 = (Priority) 2;

Console.WriteLine(p3);










$ dotnet run

Численной значение Low равно 0

Normal

High



Флаги перечислений

С помощью атрибута [Flags] перечисление можно превратить в битовое поле. Затем это перечисление можно использовать в качестве набора флагов.
(Значения этих членов перечисления должны быть степенью двойки.)

Далее мы можем использовать побитовые логические операторы | или & для комбинирования вариантов.



var readWrite = Permissions.Read | Permissions.Write;

Console.WriteLine(readWrite);



[Flags]

enum Permissions

{

    Execute = 0b_0000_0001,

    Write = 0b_0000_0010,

    Read = 0b_0000_0100

}



В примере мы определяем разрешение на чтение и запись с помощью оператора |.



$ dotnet run 

Write, Read



Таким образом в данной статье мы рассмотрели основы работы с перечислениями в C#.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий