Перечисления и [Flags]
Определяйте перечисления с явными значениями и базовыми типами, безопасно преобразуйте и разбирайте их, а также моделируйте комбинируемые параметры с помощью [Flags].
«Перечисления и [Flags]» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 3 уроков всего.
Обзор перечислений
Цель: Использовать перечисления для именованных констант и [Flags] для комбинируемых параметров.
- Имена сопоставляются с числами
- Базовый тип (по умолчанию int)
- Приведение, разбор и проверка
- Побитовое объединение с помощью [Flags]
Базовое перечисление
Перечисления — это именованные константы. Можно вывести имя или привести значение к базовому числу.
using System;
public enum OrderStatus
{
Pending = 0,
Processing = 1,
Shipped = 2,
Delivered = 3,
Cancelled = 4
}
public class Program
{
public static void Main(string[] args)
{
OrderStatus s = OrderStatus.Processing;
Console.WriteLine("Status = " + s);
Console.WriteLine("Numeric = " + (int)s);
}
}
Базовый тип и приведение
Можно выбрать базовый тип (short, byte и т. д.). Приведение чисел не проверяет корректность значения.
using System;
// Choose underlying type if needed (default is int)
public enum HttpCode : short
{
Ok = 200,
NotFound = 404
}
public class Program
{
public static void Main(string[] args)
{
short code = (short)HttpCode.Ok; // cast to number
HttpCode fromNum = (HttpCode)404; // cast from number (no validation)
Console.WriteLine("code=" + code);
Console.WriteLine("fromNum=" + fromNum);
}
}
Разбор и проверка
Используйте TryParse перечисления для чтения из текста, а IsDefined — для проверки числовых значений.
using System;
public enum Color
{
Red = 1, Green = 2, Blue = 3
}
public class Program
{
public static void Main(string[] args)
{
Color c;
bool ok = Enum.TryParse<Color>("green", true, out c); // ignore case
Console.WriteLine("Parsed? " + ok + " value=" + c);
// Validate a numeric value before casting
int raw = 4;
bool valid = Enum.IsDefined(typeof(Color), raw);
Console.WriteLine("Is 4 a defined Color? " + valid);
}
}
[Флаги] на практике
Добавьте атрибут [Флаги] и назначьте значения, являющиеся степенями двойки. Объединяйте их с помощью |, проверяйте с помощью &, удаляйте с помощью ~ и &.
using System;
[Flags]
public enum FileAccessMode
{
None = 0,
Read = 1, // 0001
Write = 2, // 0010
Exec = 4 // 0100
}
public class Program
{
public static void Main(string[] args)
{
FileAccessMode m = FileAccessMode.Read | FileAccessMode.Write; // combine
Console.WriteLine("Mode = " + m); // prints "Read, Write"
// Test a flag (two common patterns)
bool canWrite = (m & FileAccessMode.Write) != 0;
Console.WriteLine("Can write? " + canWrite);
// Remove a flag
m = m & ~FileAccessMode.Write;
Console.WriteLine("After remove: " + m);
}
}
Советы по перечислениям
Советы:
- Задавайте значения явно и сохраняйте их неизменными.
- Для [Флаги] используйте степени двойки и добавьте значение Отсутствуют = 0.
- Проверяйте входные данные с помощью TryParse перечисления и IsDefined.
- Не используйте обычные целые числа в общедоступных интерфейсах; предпочитайте перечисления.
Значение атрибута флагов
Повторение
Повторение: используйте перечисления для понятных констант с проверкой типов. Безопасно разбирайте и проверяйте значения. Для объединяемых параметров добавьте [Флаги] и используйте побитовые операторы для установки, проверки и удаления флагов.
Часто задаваемые вопросы
Урок «Перечисления и [Flags]» бесплатный?
Да — полный текст урока «Перечисления и [Flags]» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 3 уроков всего.
Чему я научусь в уроке «Перечисления и [Flags]»?
Определяйте перечисления с явными значениями и базовыми типами, безопасно преобразуйте и разбирайте их, а также моделируйте комбинируемые параметры с помощью [Flags]. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.
Сколько времени занимает урок «Перечисления и [Flags]»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Структуры: семантика значений и шаблон неизменяемости
- Типы, подобные записям, и равенство на основе значений
- Перечисления и [Flags]