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()
.