Cum să enumerate C# enum
Enumerațiile sunt utilizate pe scară largă în limbajul C#.
Și există 4 moduri de enumerate enum în C#.
- Utilizarea
C# Enum.GetValues()în .Net 5 și versiunile superioare. - Folosind
C# Enum.GetValues()în versiuni .Net mai vechi. - Utilizarea
C# Enum.GetNames()pentru a enumerată numele enum ca șiruri de caractere. - Utilizarea
Linq
Să parcurgem un exemplu pentru a înțelege mai bine acest lucru.
În primul rând vom crea un fișier C# enum
public enum LogLevel
{
ERROR,
WARN,
INFO,
DEBUG
}
The enum reprezintă diferite tipuri de niveluri de jurnalizare.
Acum vom vedea diferite moduri de a enumerate the C# enum.
Utilizarea metodei C# Enum.GetValues() Generic în .Net 5 și versiunile superioare
Dacă utilizați cea mai recentă versiune a .Net, adică .Net 5 și versiunile superioare, puteți utiliza versiunea generică a metodei Enum.GetValues pentru enumerate the C# enum.
void loopEnum()
{
LogLevel[] logLevels = Enum.GetValues<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Noua versiune generică a Enum.GetValues returnează matricea de valori enum.
În continuare, putem utiliza declarațiile for sau foreach pentru a lista valorile C# enum nume.
Deoarece array-ul conține valorile enum tip trebuie să îl convertim în șir de caractere folosind metoda ToString().
Utilizarea C# Enum.GetValues() în versiunile .Net mai vechi.
În versiunile mai vechi ale .Net nu există o metodă generică disponibilă pentru metoda Enum.GetValues().
Trebuie să treceți typeof() enum ca parametru pentru metoda Enum.GetValues().
Array logLevels = Enum.GetValues(typeof(LogLevel))
Aceasta returnează valorile enum de tip System.Array și, în continuare, putem utiliza instrucțiunea foreach pentru a trece în buclă prin C# enum nume.
void loopEnum()
{
Array logLevels = Enum.GetValues(typeof(LogLevel))
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Dacă doriți rezultatul IEnumerable, putem folosi metoda Enum.GetValues().
void loopEnum()
{
var logLevels = Enum.GetValues(typeof(LogLevel)).Cast<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Utilizarea C# Enum.GetNames() pentru a enumerată numele enum ca șiruri de caractere
C# Enum.GetValues() metoda returnează o matrice de tipuri enum.
De aceea, am convertit numele enum în șiruri de caractere înainte de a le imprima în consolă.
Cu ajutorul metodei C# Enum.GetNames() putem enumerate numele enum sub formă de șiruri de caractere, astfel încât nu mai este necesară conversia lor în șiruri de caractere.
Dacă utilizați .Net 5 și versiunile superioare, puteți utiliza funcția generică C# Enum.GetNames().
void loopEnum()
{
string[] logLevels = Enum.GetNames<LogLevel>();
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
În versiunile mai vechi, trebuie să transmitem parametrul typeof() enum .
void loopEnum()
{
string[] logLevels = Enum.GetNames(typeof(LogLevel));
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Astfel, dacă doriți să enumerate nume sub formă de șiruri de caractere, puteți utiliza metoda C# Enum.GetNames().
Folosind Linq
Putem utiliza metoda Linq forEach pentru a enumerate C# enum, cu ajutorul metodelor Enum.GetValues() și Enum.GetNames().
În .Net 5 și mai sus folosiți fragmentul de cod de mai jos.
//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));
În versiunile mai vechi
//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));
Rezumat
În acest tutorial am învățat să enumerate enum în C# folosind metoda Enum.GetValues() și Enum.GetNames().