Как да enumerate C# enum

Енумите са широко използвани в езика C#.

И има 4 начина за enumerate enum в C#.

  1. Използване на C# Enum.GetValues() в .Net 5 и по-нови версии.
  2. Използване на C# Enum.GetValues() в по-стари версии на .Net.
  3. Използване на C# Enum.GetNames() за enumератиране на имена на enum като низове.
  4. Използване на Linq

Нека разгледаме един пример, за да го разберем по-добре.

Първо ще създадем C# enum

public enum LogLevel
{
   ERROR, 
   WARN, 
   INFO, 
   DEBUG
}

Сайтът enum представлява различни типове нива на регистриране.

Сега ще видим различни начини за enumерация на C# 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);
   }
}

Така че, ако искате да enumерате имената като низове, можем да използваме метода C# Enum.GetNames().

Използване на Linq

Метод Linq forEach можем да използваме, за да enumerate 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().