Преобразование и разбор перечислений
Преобразуйте перечисления в целые числа и строки и обратно.
«Преобразование и разбор перечислений» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Перечисление в целое число
Приведите перечисление к его базовому типу с помощью (int), чтобы получить числовое значение.
using System;
enum Level { Low, Medium, High }
class Program {
static void Main() {
int n = (int)Level.High;
Console.WriteLine(n);
}
}Целое число в перечисление
Приведите число обратно к типу перечисления. Значение не обязано соответствовать объявленному элементу, поэтому при необходимости выполните проверку.
using System;
enum Level { Low, Medium, High }
class Program {
static void Main() {
Level l = (Level)2;
Console.WriteLine(l);
}
}Проверка с помощью IsDefined
Enum.IsDefined подтверждает, что число или имя соответствует существующему элементу, прежде чем Вы начнёте ему доверять.
using System;
enum Level { Low, Medium, High }
class Program {
static void Main() {
Console.WriteLine(Enum.IsDefined(typeof(Level), 1));
Console.WriteLine(Enum.IsDefined(typeof(Level), 9));
}
}Перечисление в строку
ToString возвращает имя элемента, что удобно для отображения и журналирования.
using System;
enum Level { Low, Medium, High }
class Program {
static void Main() {
Console.WriteLine(Level.Medium.ToString());
}
}Разбор строки
Enum.Parse преобразует имя обратно в значение перечисления, но вызывает исключение, если имя недопустимо.
using System;
enum Level { Low, Medium, High }
class Program {
static void Main() {
Level l = (Level)Enum.Parse(typeof(Level), "High");
Console.WriteLine(l);
}
}Обобщённый Parse
Обобщённая форма Enum.Parse<T> не требует приведения типа и выглядит понятнее.
using System;
enum Level { Low, Medium, High }
class Program {
static void Main() {
Level l = Enum.Parse<Level>("Medium");
Console.WriteLine(l);
}
}Безопасный разбор с помощью TryParse
Enum.TryParse возвращает логическое значение, указывающее на успех, вместо вызова исключения, поэтому безопаснее работает с пользовательским вводом.
using System;
enum Level { Low, Medium, High }
class Program {
static void Main() {
if (Enum.TryParse<Level>("Low", out var result))
Console.WriteLine("Parsed: " + result);
}
}Обработка некорректного ввода
Если разбор завершается неудачей, TryParse возвращает отрицательный результат, чтобы Вы могли корректно отреагировать.
using System;
enum Level { Low, Medium, High }
class Program {
static void Main() {
bool ok = Enum.TryParse<Level>("Unknown", out var result);
Console.WriteLine(ok ? result.ToString() : "Invalid input");
}
}Разбор без учёта регистра
Передайте положительное логическое значение, чтобы не учитывать регистр при разборе текста, предоставленного пользователем.
using System;
enum Level { Low, Medium, High }
class Program {
static void Main() {
Level l = Enum.Parse<Level>("high", true);
Console.WriteLine(l);
}
}TryParse лучше IsDefined для имён
При разборе имён TryParse за один вызов выполняет и проверку допустимости, и преобразование.
using System;
enum Level { Low, Medium, High }
class Program {
static void Main() {
string input = "Medium";
if (Enum.TryParse<Level>(input, out var lvl) && Enum.IsDefined(typeof(Level), lvl))
Console.WriteLine("Valid: " + lvl);
}
}Обратимые преобразования
Можно преобразовать перечисление в int и обратно либо в строку и обратно, если значения допустимы.
using System;
enum Level { Low, Medium, High }
class Program {
static void Main() {
Level start = Level.High;
int num = (int)start;
Level back = (Level)num;
Console.WriteLine(start == back);
}
}Быстрая проверка
Проверьте свои знания о преобразованиях и разборе перечислений.
Итоги
Выполняйте приведение между перечислением и базовым целым числом с помощью (int) и (EnumType), а для проверки используйте Enum.IsDefined. ToString возвращает имя элемента.
Преобразуйте имена обратно с помощью Enum.Parse<T> (вызывает исключение) или более безопасного Enum.TryParse<T> (возвращает логическое значение), при необходимости игнорируя регистр.
Часто задаваемые вопросы
Урок «Преобразование и разбор перечислений» бесплатный?
Да — полный текст урока «Преобразование и разбор перечислений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Преобразование и разбор перечислений»?
Преобразуйте перечисления в целые числа и строки и обратно. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Преобразование и разбор перечислений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Определение и использование перечислений
- Перечисления-флаги и побитовые комбинации
- Преобразование и разбор перечислений
- Перебор значений перечисления