Периодически в вашей программе необходимы специальные значения (константы). Например, этими значениями может быть множество возвращаемых кодов метода. Допустим имеется функция, которая возвращает число 0 — в случае успеха, 1 — в случае предупреждения, 2 — в случае ошибки. Для человека, читающего Ваш код, будет непонятно, что это за магические числа, без изучения исходников, либо документации к методу. В C# для упрощения данных ситуации существуют перечисления enum.
Перечисление (enum) — это определяемый пользователем тип. Для метода выше, можно задать новый enum для возвращаемого значения. Назовем его ResultCode.
-
enum ResultCode { Success, Warning, Error };
Какие же плюсы мы получили в коде? С помощью данного перечисления наш код становится более понятным и самодокументированным. Теперь 0 — Success, 1 — Warning, 2 — Error. В основе перечислений лежит int, поэтому можно назвать enum — синтаксическим “сахаром” C#.
Еще один плюс, Enum легко использовать в Visual Studio. Нажимаете Tab и IntelliSense вам поможет.
Enum и строки.
Попробуем преобразовать перечисления C# в строки для отображения на консоли. Для этого вызовем ToString для переменной перечисления. Кстати, Console.Writeline автоматически вызовет ToString (это его поведение по умолчанию).
-
-
using System;
-
class Program
-
{
-
static void Main()
-
{
-
MyState state = State.Error;
-
MyState state2 = State.Ok;
- Console.WriteLine(state);
- Console.WriteLine(state2);
- }
- enum MyState
- {
- Ok,
- Warning = 2,
- Error = 4
- };
- }
-
На консоли вы должны увидеть две строки — Error и Ok.
Enum и парсинг.
Бывают ситуации, когда у нас имеется строка C# и необходимо конвертировать ее в enum. Для этого в .Net есть статические методы Enum.Parse, Enum.TryParse. Оба они отлично справляются со своей задачей, но советую использовать TryParse. Он не выкидывает исключения, если не получится преобразовать строку в enum. Вы просто проверяете возвращаемое значение метода, true — если преобразование удалось, false — в обратном случае.
Ниже приведу пример кода для ознакомления.
-
-
static void Main()
-
{
-
State st;
-
//выкинет исключение, если не преобразует
-
State obj = (State)Enum.Parse(typeof(State), «Ok»);
- if (Enum.TryParse(«Ok», out st))
- {
- //удача
- }
- else
- {
- //неудача
- }
- }
- enum State { Ok, Error, Warning }
-
На этом всё. Вопросы, не вошедшие в эту статью, будут рассмотрены во второй части о enum.