Как 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().