csharp-enumeraciones

Qué son y cómo usar las enumeraciones en C#

Una enumeración es un tipo de valor definido por el usuario que consiste en un conjunto de constantes con nombre (cada elemento lo llamaremos como ‘miembros’ de la enumeración).

Cada miembro de la enumeración es una constante que representa un valor entero único, comenzando desde 0 por defecto y aumentando en uno para cada miembro subsecuente.

Definición de una enumeración

Para definir una enumeración en C#, se utiliza la palabra clave enum seguida del nombre de la enumeración y un bloque que contiene los miembros de la enumeración:

enum DiasDeLaSemana
{
    Lunes,
    Martes,
    Miércoles,
    Jueves,
    Viernes,
    Sábado,
    Domingo
}

En este ejemplo, DiasDeLaSemana es una enumeración con siete miembros: Lunes, Martes, Miércoles, Jueves, Viernes, Sábado y Domingo.

Enumeraciones con valores específicos

Es posible asignar valores específicos a los miembros de una enumeración en lugar de utilizar los valores predeterminados.

De este modo, se puede empezar la enumeración en un valor diferente de 0 y asignar valores personalizados a cada miembro.

Por ejemplo, supongamos queremos enumerar los meses, pero que no empiecen por 0. Podríamos asignar un int cualquier a cada valor de la Enum así.

enum DiasSemana
{
    Lunes = 1,
    Martes = 2,
    Miércoles = 3,
    Jueves = 4,
    Viernes = 5,
    Sábado = 6,
    Domingo = 7
}

Si los números son correlativos, podemos numerar únicamente el primero de ellos, y el resto serán correlativos

enum DiasSemana
{
    Lunes = 1,
    Martes,
    Miércoles,
    Jueves,
    Viernes,
    Sábado,
    Domingo
}

Uso de las enumeraciones

Asignación de valores

Una vez definida una enumeración, se pueden declarar variables de ese tipo y asignarles uno de los valores definidos en la enumeración:

DiasDeLaSemana hoy = DiasDeLaSemana.Lunes;

Comparación de valores

También se pueden comparar estos valores utilizando operadores de igualdad:

if (hoy == DiasDeLaSemana.Lunes)
{
    Console.WriteLine("Hoy es lunes.");
}

Conversión de enumeraciones

Las enumeraciones en C# se basan en tipos de datos enteros, por lo que es posible convertir entre una enumeración y su tipo subyacente, que por defecto es int.

int valorNumerico = (int)DiasDeLaSemana.Miércoles;
Console.WriteLine(valorNumerico); // Salida: 2
DiasDeLaSemana dia = (DiasDeLaSemana)4;
Console.WriteLine(dia); // Salida: Viernes

Iterando sobre los valores de una enumeración

En ocasiones, puede ser útil iterar sobre los valores de una enumeración. Para hacer esto, se puede utilizar el método estático Enum.GetValues() que devuelve un arreglo con todos los valores de la enumeración. A continuación, se muestra un ejemplo:

foreach (MesesAño mes in Enum.GetValues(typeof(MesesAño)))
{
   Console.WriteLine(mes);
}

En este ejemplo, se itera sobre todos los valores de la enumeración MesesAño y se imprime cada uno de ellos en la consola.

Ejemplos prácticos