Тип enum

Тип enum предназначен для создания перечислений. Каждое перечисление определяет группу именованных констант. Например:

enum E1 {One, Two, Three}

Такое перечисление эквивалентно следующим строкам кода:

const int One = 0;

const int Two = 1;

const int Three = 2;

Таким образом, перечисление — это всего лишь компактное объявление сразу нескольких целочисленных констант. Применение перечислений делает программы нагляднее. Например:

using System;

public class EnumDemo

{

enum Месяцы {Январь, Февраль, Март, Апрель, Май, Июнь,

Июль, Август, Сентябрь, Октябрь, Ноябрь, Декабрь};

static void Main()

{

Месяцы Месяц = Месяцы.Август;

if (Месяц == Месяцы.Август)

Console.WriteLine("Еду к морю!");

}

}

При необходимости можно изменить начальную точку отсчета:

enum E1 {

One = 1, // = 1

Two, // = 2

Three}; // = 3

Более того, для элементов перечисления необязательно использовать строго последовательные числовые значения. Например:

enum E1 {One = -1, Two = 99, Three = 0};

По умолчанию создается группа констант типа int, но программист может явно указать базовый тип:

enum E1: byte {One, Two, Three};

Таким же образом можно указывать любой из целочисленных типов С# (byte, sbyte, short, ushort, int, uint. long. ulong).

В основе перечислений лежит системный тип System.Enum. В нем предусмотрены статические общедоступные методы, некоторые из которых показаны в табл. 5.7.

Таблица 5.7. Методы класса System.Enum

Метод

Описание

string GetName(Type enumType, object Value);

Возвращает имя члена Value перечисления valueType

string{} GetNames(Type enumType);

Возвращает массив имен всех членов перечисления enumType

string Format(Type enumType, object value, string format);

Возвращает имя или значение члена Value перечисления enumType в зависимости от флага форматирования format

Type GetUnderlyingType(Type enumType);

Возвращает тип членов перечисления enumType

Array GetValues(Type enumType);

Возвращает массив значений всех членов перечисления enumType

bool IsDefined(Type enumType, object Value);

Возвращает true, если в перечислении enumType есть член Value

При обращении к методу Format() разрешается указывать один их флагов форматирования, описанных в табл. 5.8.

Таблица 5.8. Допустимые флаги форматирования метода Format

Флаг

Описание

G или g

Если член перечисления Value задан значением, метод возвращает его имя, в противном случае — его значение

Х или х

Возвращает 16-ричное значение члена перечисления

D или d

Возвращает десятичное значение члена перечисления

В листинге 5.6 приведена программа, иллюстрирующая работу с перечислениями (файл Ch05\EnumTester\Class1.cs). Для вывода членов перечисления в ней используется цикл foreach, который описан в главе 7.

Листинг 5.6. Работа с перечислениями

using System;

public class Program

{

enum Days {Понедельник, Вторник, Среда,

Четверг, Пятница, Суббота, Воскресенье};

public static void Main()

{

Type weekdays = typeof(Days);

Days wd = Days.Пятница;

Console.WriteLine("Члены перечисления Days и их значения:");

foreach(string s in Enum.GetNames(weekdays) )

Console.WriteLine( "{0,-12}= {1}", s,

Enum.Format(weekdays, Enum.Parse(weekdays, s), "d"));

Console.WriteLine();

Console.WriteLine("Базовый тип членов: {0}\n",

Enum.GetUnderlyingType(weekdays));

Console.WriteLine("16-ричное значение члена {0} равно {1}",

wd.ToString(), Enum.Format(weekdays, wd, "X"));

Console.ReadLine();

}

}

Предлагаю ознакомиться с аналогичными статьями: