Перечисления в C#: как правильно использовать enum
В C# есть много крутых инструментов, которые позволяют улучшить любой код. Один из них — enum. Давайте разберёмся, что это и как с ним работать.
vlada_maestro / shutterstock
Списки перечисления (или enum) сокращают код и улучшают его читаемость. В этой статье мы создадим enum и научимся применять его эффективно.
Что такое enum в C#
Это список однотипных значений: цветов, состояний, способов выравнивания и так далее. Например, в C# существует встроенный список цветов:
То есть нам не нужно вручную вводить код цвета — вместо этого мы просто выбираем значение из заранее составленного списка.
В самом enum тоже не хранится код цвета. Цифра 9 на примере выше — это индекс элемента в списке. Логика изменения цвета в нашем случае примерно такая:
Как создать enum в C#
Создайте отдельный файл и назовите его так, чтобы понять, какой это список. Например, Direction.cs:
После объявления нового enum он используется как тип данных:
Вы можете указать и какие-то собственные значения для элементов. Например, коды ответа веб-сервера:
По умолчанию тип значения — int, но он изменяется на любой другой целочисленный тип:
Как использовать enum в C#
Самый простой пример — конструкции if и switch.
Вот результат работы такой программы:
Также вы можете использовать enum вместе с полиморфизмом.
Таким образом вы получите код, который очень быстро читается. И теперь не нужно думать, какой метод использовать, — благодаря полиморфизму всё выглядит почти как человеческая речь: set item type — Food (указать тип предмета — Еда).
Другая хорошая практика — использовать enum в качестве возвращаемого типа для методов, в которых ошибка может произойти по разным причинам. Например, отправка данных на сервер.
Этот метод возвращает три сообщения в зависимости от ситуации:
- Попытка отправить пустой запрос.
- Успешная отправка запроса.
- Неизвестная ошибка.
Конечно, допустимо куда больше вариантов: от ошибки базы данных до превышения времени ожидания.
Как enum помогает улучшить читаемость
Представим, что у нас есть класс Item со следующими полями:
- id — идентификатор;
- name — название;
- isWeapon — булево значение, которое говорит, является ли предмет оружием.
Все эти значения передаются объекту через конструктор, поэтому инициализация выглядит так:
Без enum со временем вы забудете, за что отвечает третий аргумент, и вам придётся каждый раз проверять реализацию класса, чтобы освежить память. Или вы добавите новые типы предметов, из-за чего таких аргументов (isArmor, isPotion) станет ещё больше:
Избежать таких неприятных моментов как раз и помогает enum: создайте перечисление ItemType и передавайте в конструктор его.
С первого взгляда понятно, что здесь имеется в виду.
Заключение
C# — это мощный и красивый язык, который даёт разработчикам большие возможности, позволяя писать почти человеческим языком. Списки перечислений — лишь одна из таких вещей. Ещё есть лямбда-функции, делегаты, ООП и многое другое.