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