Как да enumerate C# enum
Енумите са широко използвани в езика C#
.
И има 4 начина за enumerate 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
представлява различни типове нива на регистриране.
Сега ще видим различни начини за 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()
.