Enum C# | Перечисления C#

Перечисления C# — enum C# — это набор именованных констант, позволяющих сделать исходный код программы более удобочитаемым. Оно позволяет задать имена для небольшого набора используемых целочисленных значений.

Смотрите моё видео на тему Перечисления C# — Enum C#

Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного контента для программистов.
А на  YouTube-канале ты найдешь обучающие видео по программированию. Подписывайся!

Зачем нужны перечисления (enum)?

Рассмотрим следующий пример. В рамках приложения нем необходимо иметь переменную, в которой будет храниться день недели. Для того, чтобы решить эту задачу можно просто завести целочисленную переменную, в которой хранить номер дня недели. Но тут возникает другая проблема, как вести отчет, от нуля или от единицы? А из этого вытекает следующая проблема, если ваш проект в дальнейшем будет поддерживать другой человек, у него могут возникнуть большие трудности, так как он не будет знать, что именно эти числа обозначают. Другой вариант, это хранить имя дня недели в строковой переменно, но и тут не все гладко, так как возникает вероятность опечатки, использования больших и маленьких букв и так далее.

Для решения подобных проблем отлично подходят перечисления — enum. Они позволяют создавать собственные миниатюрные типы данных и использовать из в исходном коде.

Перечисление (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-канал. Там еще больше полезного и интересного для программистов.