0Pricing
C# Academy · Урок

Перебор значений перечисления

Перечисляйте все элементы с помощью 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 — локальная установка не требуется.

Все уроки этого курса

  1. Определение и использование перечислений
  2. Перечисления-флаги и побитовые комбинации
  3. Преобразование и разбор перечислений
  4. Перебор значений перечисления
← Назад к C# Academy