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