Полное руководство по языку программирования С# 14 и платформе .NET 10 / Основы программирования на C#

Перечисления enum

Начальный ⏱ 4 мин чтения 👁 2 🕓 обновлено 11.08.2026

Кроме примитивных типов данных в языке программирования C# есть такой тип как enum или перечисление. Перечисления представляют набор логически связанных констант.

Объявление перечисления происходит с помощью оператора enum:


enum название_перечисления
{
	// значения перечисления
	значение1,
	значение2,
	.......
	значениеN
}

После оператора enum идет название перечисления. И затем в фигурных скобках через запятую перечисляются константы перечисления.

Определим простейшее перечисление:


enum DayTime
{
    Morning,
    Afternoon,
    Evening,
    Night
}

Здесь определено перечисление DayTime, которое имеет четыре значения: Morning, Afternoon, Evening и Night

Каждое перечисление фактически определяет новый тип данных, с помощью которых мы также, как и с помощью любого другого типа, можем определять переменные, константы, параметры методов и т.д. В качестве значения переменной, константы и параметра метода, которые представляют перечисление, должна выступать одна из констант этого перечисления, например:

const DayTime dayTime = DayTime.Morning;

Далее в программе мы можем использовать подобные переменные/константы/параметры как и любые другие:


DayTime dayTime = DayTime.Morning;

if(dayTime == DayTime.Morning)  
    Console.WriteLine("Доброе утро");
else
    Console.WriteLine("Привет");

enum DayTime
{
    Morning,
    Afternoon,
    Evening,
    Night
}

Хранение состояния

Зачастую переменная перечисления выступает в качестве хранилища состояния, в зависимости от которого производятся некоторые действия:


DayTime now = DayTime.Evening;

PrintMessage(now);					 // Добрый вечер
PrintMessage(DayTime.Afternoon);	// Добрый день
PrintMessage(DayTime.Night);		// Доброй ночи

void PrintMessage(DayTime dayTime)
{
    switch (dayTime)
    {
        case DayTime.Morning:
            Console.WriteLine("Доброе утро");
            break;
        case DayTime.Afternoon:
            Console.WriteLine("Добрый день");
            break;
        case DayTime.Evening:
            Console.WriteLine("Добрый вечер");
            break;
        case DayTime.Night:
            Console.WriteLine("Доброй ночи");
            break;
    }
}
enum DayTime
{
    Morning,
    Afternoon,
    Evening,
    Night
}

Здесь метод PrintMessage() в качестве параметра принимает значение типа перечисления DayTime и зависимости от этого значения выводит определенное приведение.

Другой пример:


DoOperation(10, 5, Operation.Add);          // 15
DoOperation(10, 5, Operation.Subtract);     // 5
DoOperation(10, 5, Operation.Multiply);     // 50
DoOperation(10, 5, Operation.Divide);       // 2

void DoOperation(double x, double y, Operation op)
{
    double result = op switch
    {
        Operation.Add => x + y,
        Operation.Subtract => x - y,
        Operation.Multiply => x * y,
        Operation.Divide => x / y
    };
    Console.WriteLine(result);
}
enum Operation
{
    Add,
    Subtract,
    Multiply,
    Divide
}

Здесь определено перечисление Operation, которое представляет арифметические операции. Каждый тип операций определен в виде одной из констант перечисления. И также определен метод DoOperation(), который в качестве параметров принимает два числа и тип операции в виде константы перечисления и в зависимости от этого типа возвращает из конструкции switch результат определенной операции.

Тип и значения констант перечисления

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


enum Time : byte
{
    Morning,
    Afternoon,
    Evening,
    Night
}

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

Тип влияет на значения, которые могут иметь константы. По умолчанию каждому элементу перечисления присваивается целочисленное значение, причем первый элемент будет иметь значение 0, второй - 1 и так далее. Например, возьмем выше определенное DayTime:


DayTime now = DayTime.Morning;

Console.WriteLine((int) now);  // 0
Console.WriteLine((int) DayTime.Night);  // 3

enum DayTime
{
    Morning,
    Afternoon,
    Evening,
    Night
}

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

(int) DayTime.Night	// 3

В то же время, несмотря на то, что каждая константа сопоставляется с определенным числом, мы НЕ можем присвоить ей числовое значение:


DayTime now = 2;	// ! Ошибка

Можно также явным образом указать значения элементов, либо указав значение первого элемента:


enum DayTime
{
    Morning = 3,	// каждый следующий элемент по умолчанию увеличивается на единицу
    Afternoon,		// этот элемент равен 4
    Evening,		// 5
    Night			// 6
}

Но можно и для всех элементов явным образом указать значения:


enum DayTime
{
    Morning = 2,
    Afternoon = 4,
    Evening = 8,
    Night = 16
}

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


enum DayTime
{
    Morning = 1,
    Afternoon = Morning,
    Evening = 2,
    Night = 2
}
Дополнительные материалы

Проверь себя

📋 Тест по теме «Перечисления enum» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

_____ название_перечисления
{
	// значения перечисления
	значение1,
	значение2,
	.......
	значениеN
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

enum _____
{
    Morning,
    Afternoon,
    Evening,
    Night
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

const DayTime _____ = DayTime.Morning;
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

DayTime dayTime = DayTime._____;

if(dayTime == DayTime.Morning)  
    Console.WriteLine("Доброе утро");
else
    Console.WriteLine("Привет");

enum DayTime
{
    Morning,
    Afternoon,
    Evening,
    Night
}
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

DayTime now = DayTime.Evening;

_____(now);					 // Добрый вечер
PrintMessage(DayTime.Afternoon);	// Добрый день
PrintMessage(DayTime.Night);		// Доброй ночи

void PrintMessage(DayTime dayTime)
{
    switch (dayTime)
    {
        case DayTime.Morning:
            Console.WriteLine("Доброе утро");
            break;
        case DayTime.Afternoon:
            Console.WriteLine("Добрый день");
            break;
        case DayTime.Evening:
            Console.WriteLine("Добрый вечер");
            break;
        case DayTime.Night:
            Console.WriteLine("Доброй ночи");
            break;
    }
}
enum DayTime
{
    Morning,
    Afternoon,
    Evening,
    Night
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

enum название_перечисления
{
	// значения перечисления
	значение_____,
	значение_____,
	.......
	значениеN
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

enum DayTime
{
    Morning,
    _____,
    _____,
    Night
}
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

Строки кода из примера этого урока перемешаны. Впишите их в правильном порядке, каждую строку — с новой строки.

enum название_перечисления
	.......
	значениеN
}
	// значения перечисления
{
	значение2,
	значение1,
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Перечисления enum»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Перечисления enum», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

enum название_перечисления
{
	// значения перечисления
	значение1,
	значение2,
	.......
	значениеN
}
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Перечисления enum»
+30 XP

Изучите приведённый фрагмент кода и опишите, при каких входных данных или условиях он может сработать не так, как ожидается (граничный случай, отсутствие проверки и т.п.). Предложите исправленный вариант.

enum DayTime
{
    Morning,
    Afternoon,
    Evening,
    Night
}
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Перечисления enum»
+50 XP

Соберите небольшую программу, которая последовательно демонстрирует ключевые идеи урока. Программа должна быть рабочей и содержать минимум два самостоятельно написанных фрагмента, а не просто копию примера из урока.

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «Перечисления enum»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «Перечисления enum». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.