Перечисления C# — enum C# — это набор именованных констант, позволяющих сделать исходный код программы более удобочитаемым. Оно позволяет задать имена для небольшого набора используемых целочисленных значений.
Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного контента для программистов.
А на YouTube-канале ты найдешь обучающие видео по программированию. Подписывайся!
Зачем нужны перечисления (enum)?
Рассмотрим следующий пример. В рамках приложения нем необходимо иметь переменную, в которой будет храниться день недели. Для того, чтобы решить эту задачу можно просто завести целочисленную переменную, в которой хранить номер дня недели. Но тут возникает другая проблема, как вести отчет, от нуля или от единицы? А из этого вытекает следующая проблема, если ваш проект в дальнейшем будет поддерживать другой человек, у него могут возникнуть большие трудности, так как он не будет знать, что именно эти числа обозначают. Другой вариант, это хранить имя дня недели в строковой переменно, но и тут не все гладко, так как возникает вероятность опечатки, использования больших и маленьких букв и так далее.
Для решения подобных проблем отлично подходят перечисления — enum. Они позволяют создавать собственные миниатюрные типы данных и использовать из в исходном коде.
Объявление Enum
Наиболее полный обобщенный формат объявления перечисления выглядит следующим образом:
модификтор_доступа enum имя : тип { имя1 = значение1, имя2 = значение2, }
Давайте рассмотрим описанный выше пример с днями недели и объявим соответствующее перечисление:
/// <summary> /// Дни недели. /// </summary> public enum WeekDays : byte { /// <summary> /// Понедельник. /// </summary> Monday = 1, /// <summary> /// Вторник. /// </summary> Tuesday = 2, /// <summary> /// Среда. /// </summary> Wednesday = 3, /// <summary> /// Четверг. /// </summary> Thursday = 4, /// <summary> /// Пятница. /// </summary> Friday = 5, /// <summary> /// Суббота. /// </summary> Saturday = 6, /// <summary> /// Воскресенье. /// </summary> Sunday = 7, }
Обратите внимание на несколько особенностей объявления перечисления. Рекомендуется давать имя перечисления во множественном числе и с большой буквы. Лучше всего использовать тип byte, если нужны значение больше либо равные нулю, или sbyte для отрицательных значений. Имена значений enum также пишутся с большой буквы, но в единственном числе. Рекомендуется задавать конкретные значения для каждого элемента enum для большей наглядности. Каждый элемент перечисления рекомендуется писать с новой строки. После последнего элемента можно оставлять запятую. Перечисления принято выносить в отдельные файлы или же создавать один файл, содержащий все перечисления проекта. Также для удобства можно рекомендуется добавлять xmldoc комментарии как ко всему перечислению, так и к каждому его элементу. И настоятельно не рекомендуется использование кириллицУ для имен элементов enum. Решение этой задачи подробно рассматривается в статье Отображение значения Enum в C# на русском.
Но enum можно объявлять и в более сжатом формате. По умолчанию используется тип int, нумерация ведется с нуля.
enum WeekDays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, }
Использование перечислений
Для того, чтобы обратиться к перечислению, необходимо просто указать имя перечисления и его значение через точку. Enum могут использоваться в качестве аргументов метода, что делает код намного более читаемым, чем использование «магических переменных».
static void Main(string[] args) { WriteDay(WeekDays.Friday); Console.ReadLine(); } public static void WriteDay(WeekDays day) { Console.WriteLine($"Today is {day}"); }
Обратите внимание, что имеется возможность взаимного приведения чисел и перечислений. То есть мы можем приводить как целое число из возможного диапазона к перечислению,
WriteDay((WeekDays) 3);
так и в элемент перечисления к целому числу
Console.WriteLine((int) WeekDays.Wednesday);
Заключение
Использование Enum в коде считается очень хорошей практикой среди программистов. Это позволяет сделать код намного более читаемым и легко масштабируемым.
Также рекомендую прочитать статью Принципы SOLID C#. И не забудьте подписывайтесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для программистов.