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.
Si quieres aprender más sobre Enumeraciones
consulta el Curso de Introducción a la Programación leer más
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
Uso en una aplicación de tareas
Supongamos que estamos desarrollando una aplicación para gestionar tareas y queremos utilizar enumeraciones para representar el estado de una tarea:
enum EstadoTarea
{
Pendiente,
EnProgreso,
Completada,
Cancelada
}
class Tarea
{
public string Nombre { get; set; }
public EstadoTarea Estado { get; set; }
public void MostrarEstado()
{
Console.WriteLine($"La tarea '{Nombre}' está en estado: {Estado}");
}
}
class Program
{
static void Main()
{
Tarea tarea = new Tarea
{
Nombre = "Estudiar para el examen",
Estado = EstadoTarea.EnProgreso
};
tarea.MostrarEstado(); // Salida: La tarea 'Estudiar para el examen' está en estado: EnProgreso
}
}
Uso en un juego
En el desarrollo de juegos, las enumeraciones pueden ser útiles para representar diferentes tipos de objetos o estados del juego:
enum TipoDeEnemigo
{
Goblin,
Orco,
Dragón
}
class Enemigo
{
public TipoDeEnemigo Tipo { get; set; }
public void MostrarTipo()
{
Console.WriteLine($"Este enemigo es un: {Tipo}");
}
}
class Program
{
static void Main()
{
Enemigo enemigo = new Enemigo
{
Tipo = TipoDeEnemigo.Dragón
};
enemigo.MostrarTipo(); // Salida: Este enemigo es un: Dragón
}
}