Cómo enumerar C# enum
Los Enums son ampliamente utilizados en el lenguaje C#
.
Y hay 4 maneras de enumerate enum en C#
.
- Usando
C# Enum.GetValues()
en .Net 5 y superiores. - Usando
C# Enum.GetValues()
en versiones anteriores de .Net. - Uso de
C# Enum.GetNames()
para enumerar nombres de enum como cadenas. - Utilización de
Linq
Veamos un ejemplo para entenderlo mejor.
Primero crearemos un archivo C enum
public enum LogLevel
{
ERROR,
WARN,
INFO,
DEBUG
}
La dirección enum
representa diferentes tipos de niveles de registro.
Ahora veremos diferentes formas de enumerar el C# enum
.
Usando C# Enum.GetValues()
Método genérico en .Net 5 y superiores
Si está utilizando la última versión de .Net
, es decir, .Net 5
y superiores puede utilizar la versión genérica para el método Enum.GetValues
para enumerar el C# enum
.
void loopEnum()
{
LogLevel[] logLevels = Enum.GetValues<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
La nueva versión genérica de Enum.GetValues
devuelve la matriz de valores enum.
Y además podemos usar las sentencias for
o foreach
para listar los C# enum
nombres.
Como el array contiene el tipo enum
necesitamos convertirlo a cadena usando el método ToString()
.
Usando C# Enum.GetValues()
en versiones antiguas de .Net.
En las versiones anteriores de .Net
no hay ningún método genérico disponible para el método Enum.GetValues()
.
Es necesario pasar typeof()
enum como parámetro al método Enum.GetValues()
.
Array logLevels = Enum.GetValues(typeof(LogLevel))
Y devuelve enum valores de tipo System.Array
y además podemos utilizar foreach
declaración de bucle a través de la C# enum
nombres.
void loopEnum()
{
Array logLevels = Enum.GetValues(typeof(LogLevel))
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Si desea IEnumerable
resultado, podemos lanzar más el método Enum.GetValues()
.
void loopEnum()
{
var logLevels = Enum.GetValues(typeof(LogLevel)).Cast<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Usando C# Enum.GetNames()
para enumerar nombres enum como cadenas
C# Enum.GetValues()
devuelve una matriz de tipos enum.
Por eso convertimos los nombres enum a cadena antes de imprimirlos en la consola.
Usando el método C# Enum.GetNames()
podemos enumerar los nombres de enum como cadenas, por lo que no es necesario convertirlos a cadenas.
Si utiliza .Net 5
y superiores, puede utilizar la función genérica C# Enum.GetNames()
.
void loopEnum()
{
string[] logLevels = Enum.GetNames<LogLevel>();
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
En las versiones anteriores tenemos que pasar typeof()
enum parámetro.
void loopEnum()
{
string[] logLevels = Enum.GetNames(typeof(LogLevel));
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Así que si quieres en enumerar nombres como cadenas podemos usar el método C# Enum.GetNames()
.
Utilizando Linq
Podemos utilizar el método Linq forEach
para enumerar C# enum, con la ayuda de los métodos Enum.GetValues()
y Enum.GetNames()
.
En .Net 5
y superiores utilice el siguiente fragmento de código.
//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));
En las versiones anteriores
//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));
Resumen
En este tutorial hemos aprendido a enumerar enum en C# utilizando los métodos Enum.GetValues()
y Enum.GetNames()
.