Перебор значений перечисления
Перечисляйте все элементы с помощью Enum.GetValues.
«Перебор значений перечисления» — бесплатный урок C# Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Перечисление элементов перечисления
Иногда требуется получить каждое значение перечисления, например для создания меню. Enum.GetValues предоставляет эти значения.
using System;
enum Day { Mon, Tue, Wed }
class Program {
static void Main() {
foreach (Day d in Enum.GetValues<Day>())
Console.WriteLine(d);
}
}Обобщённый GetValues
Обобщённый Enum.GetValues<T>() возвращает типизированный массив, по которому можно напрямую выполнять цикл.
using System;
enum Color { Red, Green, Blue }
class Program {
static void Main() {
Color[] all = Enum.GetValues<Color>();
Console.WriteLine(all.Length);
}
}Получение имён членов
Enum.GetNames<T>() возвращает имена членов в виде строк.
using System;
enum Color { Red, Green, Blue }
class Program {
static void Main() {
foreach (string name in Enum.GetNames<Color>())
Console.WriteLine(name);
}
}Имена и значения вместе
Выполните цикл по значениям и приведите их к int, чтобы вывести и имя, и базовое числовое значение.
using System;
enum Color { Red = 1, Green = 2, Blue = 4 }
class Program {
static void Main() {
foreach (Color c in Enum.GetValues<Color>())
Console.WriteLine(c + " = " + (int)c);
}
}Подсчёт членов
Длина массива значений показывает, сколько членов содержит перечисление.
using System;
enum Suit { Hearts, Diamonds, Clubs, Spades }
class Program {
static void Main() {
int count = Enum.GetValues<Suit>().Length;
Console.WriteLine(count);
}
}Создание меню
Перебор значений идеально подходит для вывода пронумерованного списка вариантов.
using System;
enum Option { Start, Settings, Quit }
class Program {
static void Main() {
int i = 1;
foreach (Option o in Enum.GetValues<Option>())
Console.WriteLine(i++ + ") " + o);
}
}Фильтрация во время перебора
Во время цикла можно пропускать определённые члены, например маркер отсутствия.
using System;
enum State { None, Active, Closed }
class Program {
static void Main() {
foreach (State s in Enum.GetValues<State>())
if (s != State.None)
Console.WriteLine(s);
}
}Перебор с LINQ
Объедините Enum.GetValues с LINQ для фильтрации или преобразования.
using System;
using System.Linq;
enum Level { Low = 1, Medium = 2, High = 3 }
class Program {
static void Main() {
var highOnes = Enum.GetValues<Level>().Where(l => (int)l >= 2);
foreach (var l in highOnes) Console.WriteLine(l);
}
}Старая необобщённая форма
До появления обобщений использовалась конструкция Enum.GetValues(typeof(T)), возвращающая нетипизированный массив.
using System;
enum Color { Red, Green, Blue }
class Program {
static void Main() {
foreach (Color c in Enum.GetValues(typeof(Color)))
Console.WriteLine(c);
}
}Флаги и перебор
Для перечислений с флагами перебор выводит каждый отдельный флаг; также появляются составные служебные члены, поэтому при необходимости выполните фильтрацию.
using System;
[Flags]
enum Perm { Read = 1, Write = 2, Execute = 4 }
class Program {
static void Main() {
foreach (Perm p in Enum.GetValues<Perm>())
Console.WriteLine(p + " = " + (int)p);
}
}Зачем перебирать перечисления
Перебор поддерживает согласованность пользовательского интерфейса и проверки с перечислением: добавьте член — и циклы автоматически начнут его включать.
using System;
enum Size { Small, Medium, Large }
class Program {
static void Main() {
foreach (Size s in Enum.GetValues<Size>())
Console.WriteLine("Available: " + s);
}
}Быстрая проверка
Проверьте, насколько хорошо Вы поняли перебор перечислений.
Итоги
Enum.GetValues<T>() возвращает каждый член в типизированном массиве, а Enum.GetNames<T>() — их имена. С помощью цикла можно вывести имена вместе с числовыми значениями, подсчитать члены, создать меню или выполнить фильтрацию с помощью LINQ.
Перебор автоматически поддерживает согласованность меню и проверок по мере расширения перечисления.
Часто задаваемые вопросы
Урок «Перебор значений перечисления» бесплатный?
Да — полный текст урока «Перебор значений перечисления» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Перебор значений перечисления»?
Перечисляйте все элементы с помощью Enum.GetValues. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Перебор значений перечисления»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Определение и использование перечислений
- Перечисления-флаги и побитовые комбинации
- Преобразование и разбор перечислений
- Перебор значений перечисления