Come enumerare C# enum
Gli enum sono ampiamente utilizzati nel linguaggio C#.
Ci sono 4 modi per enumerare enum in C#.
- Usare
C# Enum.GetValues()in .Net 5 e superiori. - Usando
C# Enum.GetValues()nelle versioni precedenti di .Net. - Utilizzo di
C# Enum.GetNames()per enumerare i nomi di enum come stringhe. - Utilizzo di
Linq
Vediamo un esempio per capire meglio.
Per prima cosa creeremo un oggetto C# enum
public enum LogLevel
{
ERROR,
WARN,
INFO,
DEBUG
}
Il enum rappresenta diversi tipi di livelli di registrazione.
Vedremo ora diversi modi per enumerare i livelli di registrazione C# enum.
Utilizzo del metodo C# Enum.GetValues() Generic in .Net 5 e superiori
Se si utilizza l’ultima versione di .Net, ovvero .Net 5 e superiori, è possibile utilizzare la versione generica del metodo Enum.GetValues per enumerare il file C# enum.
void loopEnum()
{
LogLevel[] logLevels = Enum.GetValues<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
La nuova versione generica di Enum.GetValues restituisce l’array di valori enum.
Inoltre, si possono usare le istruzioni for o foreach per elencare i nomi C# enum nomi.
Poiché l’array contiene il tipo enum dobbiamo convertirlo in stringa utilizzando il metodo ToString().
Utilizzando C# Enum.GetValues() nelle vecchie versioni di .Net.
Nelle versioni più vecchie di .Net non è disponibile un metodo generico per il metodo Enum.GetValues().
È necessario passare typeof() enum come parametro al metodo Enum.GetValues().
Array logLevels = Enum.GetValues(typeof(LogLevel))
Questo metodo restituisce enum valori di tipo System.Array e inoltre si può usare l’istruzione foreach per scorrere i nomi C# enum nomi.
void loopEnum()
{
Array logLevels = Enum.GetValues(typeof(LogLevel))
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Se si desidera un risultato di tipo IEnumerable, si può utilizzare il metodo Enum.GetValues().
void loopEnum()
{
var logLevels = Enum.GetValues(typeof(LogLevel)).Cast<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Usare C# Enum.GetNames() per enumerare i nomi di enum come stringhe
C# Enum.GetValues() il metodo restituisce un array di tipi enum.
Ecco perché abbiamo convertito i nomi enum in stringhe prima di stamparli nella console.
Utilizzando il metodo C# Enum.GetNames() possiamo enumerare i nomi enum come stringhe, in modo da non doverli convertire in stringhe.
Se si usa .Net 5 e oltre, si può usare la funzione generica C# Enum.GetNames().
void loopEnum()
{
string[] logLevels = Enum.GetNames<LogLevel>();
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Nelle versioni precedenti è necessario passare il parametro typeof() enum .
void loopEnum()
{
string[] logLevels = Enum.GetNames(typeof(LogLevel));
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Quindi, se si vogliono enumerare i nomi come stringhe, si può usare il metodo C# Enum.GetNames().
Utilizzando Linq
Possiamo usare il metodo Linq forEach per enumerare i nomi in C# enum, con l’aiuto dei metodi Enum.GetValues() e Enum.GetNames().
In .Net 5 e oltre, utilizzare il seguente frammento di codice.
//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));
Nelle versioni precedenti
//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));
Sommario
In questa esercitazione abbiamo imparato a enumerare enum in C# utilizzando i metodi Enum.GetValues() e Enum.GetNames().