Jak enumerate C# enum
Enumy jsou v jazyce C# hojně využívány.
A existují 4 způsoby, jak enumerate enum v C#.
- Použití
C# Enum.GetValues()v prostředí .Net 5 a vyšším. - Použití
C# Enum.GetValues()ve starších verzích .Net. - Použití
C# Enum.GetNames()k enumerate enum names as strings. - Použití adresy
Linq
Projděme si příklad, abychom jej lépe pochopili.
Nejprve vytvoříme v jazyce C# enum
public enum LogLevel
{
ERROR,
WARN,
INFO,
DEBUG
}
Na stránkách enum představuje různé typy úrovní protokolování.
Nyní se podíváme na různé způsoby, jak enumerate the C# enum.
Použití C# Enum.GetValues() Generické metody v .Net 5 a vyšších verzích
Pokud používáte nejnovější verzi .Net, tj. .Net 5 a vyšší, můžete použít generickou verzi pro Enum.GetValues metodu enumerate C# enum.
void loopEnum()
{
LogLevel[] logLevels = Enum.GetValues<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Nová obecná verze Enum.GetValues vrací pole hodnot enum.
A dále můžeme pomocí příkazů for nebo foreach vypsat tzv C# enum jmen.
Protože pole obsahuje enum typ, musíme jej převést na řetězec pomocí metody ToString().
Pomocí C# Enum.GetValues() ve starších verzích .Net.
Ve starších verzích .Net není k dispozici obecná metoda pro metodu Enum.GetValues().
Metodě Enum.GetValues() musíte jako parametr předat typeof() enum .
Array logLevels = Enum.GetValues(typeof(LogLevel))
A ta vrací hodnoty enum typu System.Array a dále můžeme pomocí příkazu foreach procházet ve smyčce tyto hodnoty C# enum jmen.
void loopEnum()
{
Array logLevels = Enum.GetValues(typeof(LogLevel))
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Pokud chceme výsledek IEnumerable, můžeme dále provést obsazení metody Enum.GetValues().
void loopEnum()
{
var logLevels = Enum.GetValues(typeof(LogLevel)).Cast<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Použití C# Enum.GetNames() k enumerate enum names jako řetězce
C# Enum.GetValues() metoda vrací pole typů enum.
Proto jsme enum jména před vypsáním do konzoly převedli na řetězec.
Pomocí metody C# Enum.GetNames() můžeme enumerovat enum jména jako řetězce, takže je není nutné převádět na řetězce.
Pokud používáte .Net 5 a vyšší, můžete použít obecnou funkci C# Enum.GetNames().
void loopEnum()
{
string[] logLevels = Enum.GetNames<LogLevel>();
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Ve starších verzích musíme předat parametr typeof() enum .
void loopEnum()
{
string[] logLevels = Enum.GetNames(typeof(LogLevel));
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Pokud tedy chceme enumerovat jména jako řetězce, můžeme použít metodu C# Enum.GetNames().
Použití Linq
Linq forEach můžeme použít metodu enumerate C# enum, pomocí metod Enum.GetValues() a Enum.GetNames().
V .Net 5 a výše použijte níže uvedený úryvek kódu.
//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));
Ve starších verzích
//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));
Souhrn
V tomto tutoriálu jsme se naučili enumerovat enum v jazyce C# pomocí metod Enum.GetValues() a Enum.GetNames().