На этом шаге мы рассмотрим пример использования перечисления.
Приведем небольшую программу, в которой используются перечисления.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr190_1 { // Объявление перечисления: enum Animals { Cat, Dog, Fox, Wolf, Bear }; // Объявление перечисления с инициализацией констант: enum Coins {One=1, Two, Five=5, Ten=10, Fifty=50}; // Класс с главным методом: class Program { // Главный метод: static void Main() { Console.WriteLine("B мире животных"); // Переменная типа перечисления: Animals animal = Animals.Cat; Console.WriteLine("animal: {0,-5} или {1}", animal, (int)animal); // Новое значение переменной: animal = Animals.Dog; Console.WriteLine("animal: {0,-5} или {1}", animal, (int)animal); // Преобразование целого числа в значение // типа перечисления: animal = (Animals)2; Console.WriteLine("animal: {0,-5} или {1}", animal, (int)animal); // Сумма переменной и целого числа: animal = animal + 1; Console.WriteLine("animal: {0,-5} или {1}", animal, (int)animal); // Применение операции инкремента: animal++; Console.WriteLine("animal: {0,-5} или {1}", animal, (int)animal); Console.WriteLine("B мире финансов"); // Переменная типа перечисления: Coins coin; // Объект с константами из перечисления: Array names = Enum.GetValues(typeof(Coins)); // Перебор констант: for (int k = 0; k < names.Length; k++) { // Значение переменной: coin = (Coins)names.GetValue(k); Console.WriteLine("coin: {0,-5} или {1}", coin, (int)coin); } // Задержка: Console.ReadLine(); } } }
Результат выполнения программы представлен ниже:

Рис.1. Результат выполнения программы
В этой программе мы объявляем два перечисления: перечисление Animals объявляется командой
enum Animals { Cat, Dog, Fox, Wolf, Bear }; ,
enum Coins {One=1, Two, Five=5, Ten=10, Fifty=50}; .
В главном методе программы командой
Animals animal = Animals.Cat;
Инструкция {0,-5} в текстовой строке в аргументе метода WriteLine() означает, что для отображения соответствующего значения выделяется 5 позиций и выравнивание выполняется по левому (из-за знака минус) краю.
Новое значение переменной animal присваивается командами
animal = Animals.Dog;
animal = (Animals)2;
animal = animal + 1;
animal++;
Coins coin;
Array names = Enum.GetValues(typeof(Coins));
coin = (Coins)names.GetValue(k); ,
Есть несколько обстоятельств, которые нужно иметь в виду при работе с перечислениями. Во-первых, как мы знаем, константы, формирующие тип перечисления, являются целочисленными. Предполагается, что
значением переменной типа перечисления может быть одна из таких констант. Но дело в том, что технических ограничений на значения для переменной типа перечисления нет. Это означает, что переменная
может получить целочисленное значение, которое не совпадает со значением ни одной из констант из перечисления. Например, если в рассмотренном выше примере выполнить команду
animal = (Animals)5; ,
animal++;
animal = animal + 1;
Нулевое значение особое: например, поле, тип которого является перечислением, инициализируется с начальным нулевым значением. Причем происходит это, даже если среди констант, формирующих перечисление, нет константы с нулевым значением. Поэтому общая рекомендация состоит в том, чтобы перечисление все же содержало константу с нулевым значением.
На следующем шаге мы начнем знакомиться со структурами.