Как enumэратировать C# enum
Перечисления широко используются в языке C#
.
И есть 4 способа enumэратировать enum в C#
.
- Использование
C# Enum.GetValues()
в .Net 5 и выше. - Использование
C# Enum.GetValues()
в более старых версиях .Net. - Использование
C# Enum.GetNames()
для enumэратирования имен enum в виде строк. - Использование
Linq
Давайте рассмотрим пример, чтобы лучше понять это.
Сначала мы создадим C# enum
public enum LogLevel
{
ERROR,
WARN,
INFO,
DEBUG
}
На enum
обозначают различные типы уровней протоколирования.
Теперь мы рассмотрим различные способы enumC# enum
.
Использование метода C# Enum.GetValues()
Generic в .Net 5 и выше
Если вы используете последнюю версию .Net
, т.е. .Net 5
и выше, вы можете использовать общую версию для метода Enum.GetValues
, чтобы enumвывести C# enum
.
void loopEnum()
{
LogLevel[] logLevels = Enum.GetValues<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Новая общая версия Enum.GetValues
возвращает массив значений enum.
Далее мы можем использовать операторы for
или foreach
для составления списка C# enum
имена.
Поскольку массив содержит enum
тип, нам необходимо преобразовать его в строку, используя метод ToString()
.
Использование C# Enum.GetValues()
в старых версиях .Net.
В старых версиях .Net
не существует общего метода для метода Enum.GetValues()
.
Вам необходимо передать typeof()
enum в качестве параметра в метод Enum.GetValues()
.
Array logLevels = Enum.GetValues(typeof(LogLevel))
Он возвращает значения enum типа System.Array
и далее мы можем использовать оператор foreach
для перебора имен C# enum
имена.
void loopEnum()
{
Array logLevels = Enum.GetValues(typeof(LogLevel))
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Если вам нужен результат IEnumerable
, мы можем использовать метод Enum.GetValues()
.
void loopEnum()
{
var logLevels = Enum.GetValues(typeof(LogLevel)).Cast<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Использование C# Enum.GetNames()
для enumэратирования enum имен как строк
C# Enum.GetValues()
метод возвращает массив enum типов.
Поэтому мы преобразовали имена enum в строку, прежде чем вывести их в консоль.
Используя метод C# Enum.GetNames()
, мы можем enumэрегировать имена enum как строки, так что конвертировать их в строки не требуется.
Если вы используете .Net 5
и выше, вы можете использовать универсальную функцию C# Enum.GetNames()
.
void loopEnum()
{
string[] logLevels = Enum.GetNames<LogLevel>();
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
В старых версиях нам необходимо передать параметр typeof()
enum .
void loopEnum()
{
string[] logLevels = Enum.GetNames(typeof(LogLevel));
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Поэтому если вы хотите en enumerate имена в виде строк, мы можем использовать метод C# Enum.GetNames()
.
Использование Linq
Мы можем использовать метод Linq forEach
для enumэратирования C# enum, с помощью методов Enum.GetValues()
и Enum.GetNames()
.
В .Net 5
и выше используйте приведенный ниже фрагмент кода.
//Using Enum.GetValues
Enum.GetValues<LogLevel>()
.ToList()
.ForEach(loglevel => Console.WriteLine(loglevel.ToString()));
//Using Enum.GetNames
Enum.GetNames<LogLevel>()
.ToList()
.ForEach(loglevel => Console.WriteLine(loglevel));
В более старых версиях
//Using Enum.GetValues
Enum.GetValues(typeof(LogLevel))
.Cast<LogLevel>().ToList()
.ForEach(loglevel => Console.WriteLine(loglevel.ToString()));
//Using Enum.GetNames
Enum.GetNames(typeof(LogLevel))
.ToList()
.ForEach(loglevel => Console.WriteLine(loglevel));
Резюме
В этом уроке мы научились enumэратировать enum в C#, используя метод Enum.GetValues()
и Enum.GetNames()
.