Cómo enumerar todos los valores de un Enum en C#: análisis completo para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué la pregunta "How can I enumerate an enum?" es tan popular?

\n\n

Si alguna vez has programado en C# y te has encontrado con enumeraciones (enum), seguramente te habrás preguntado: «¿Cómo obtengo todos los valores de este enum?». Esta pregunta es todo un éxito en Stack Overflow, con miles de visitas. Y no es de extrañar: enumerar un enum es una de esas tareas que parecen sencillas, pero sin conocer la sintaxis correcta puede dejar perplejo incluso a un desarrollador experimentado.

\n\n

En este artículo, analizaremos cómo enumerar correctamente todos los valores de un enum en C#, mostraremos ejemplos de código funcionales que puedes copiar directamente en tu proyecto y hablaremos de los posibles obstáculos. ¡Allá vamos!

\n\n

¿Qué es un enum en C#? Un breve recordatorio

\n\n

Enum (enumeración) es un tipo de dato que permite definir un conjunto de constantes con nombre. Por ejemplo, los días de la semana, estados de un pedido o tipos de error. En C#, un enum se declara así:

\n\n
public enum DayOfWeek\n{\n    Monday,\n    Tuesday,\n    Wednesday,\n    Thursday,\n    Friday,\n    Saturday,\n    Sunday\n}
\n\n

A cada elemento se le asigna por defecto un valor entero (comenzando desde 0). Pero a menudo surge la necesidad de recorrer todos los elementos de un enum — por ejemplo, para mostrarlos en una lista desplegable, crear un array o verificar si existe un valor.

\n\n

Cómo enumerar todos los valores de un enum: método básico

\n\n

La forma más popular y sencilla es usar el método estático Enum.GetValues(). Devuelve un array de todos los valores de la enumeración especificada. Así funciona:

\n\n
using System;\n\npublic class Program\n{\n    public enum Status\n    {\n        New,\n        InProgress,\n        Completed,\n        Cancelled\n    }\n\n    public static void Main()\n    {\n        // Obtenemos todos los valores del enum\n        Status[] allStatuses = (Status[])Enum.GetValues(typeof(Status));\n\n        // Los recorremos con foreach\n        foreach (Status status in allStatuses)\n        {\n            Console.WriteLine(status);\n        }\n    }\n}
\n\n

Resultado de la ejecución:

\n
New\nInProgress\nCompleted\nCancelled
\n\n

Observa: convertimos explícitamente el resultado a un array Status[], porque Enum.GetValues() devuelve un Array (sin tipo específico).

\n\n

Alternativa: Enum.GetNames()

\n\n

Si necesitas no los valores en sí, sino solo sus nombres como cadenas, usa Enum.GetNames():

\n\n
string[] statusNames = Enum.GetNames(typeof(Status));\nforeach (string name in statusNames)\n{\n    Console.WriteLine(name);\n}
\n\n

El resultado será el mismo, pero el tipo del elemento es string, no Status. Esto es útil cuando trabajas con interfaces de usuario o serialización.

\n\n

Enfoque moderno: versión genérica (C# 7.3+)

\n\n

A partir de C# 7.3, tenemos una forma más elegante: Enum.GetValues<T>(). Devuelve un array del tipo específico y no requiere conversión:

\n\n
Status[] allStatuses = Enum.GetValues<Status>();\n\nforeach (Status status in allStatuses)\n{\n    Console.WriteLine($"ID: {(int)status}, Name: {status}");\n}
\n\n

Este método es más corto y más seguro en cuanto a tipos. Si usas una versión moderna de C# (¡y deberías!), te recomiendo este.

\n\n

Ejemplo de la vida real: llenar una lista desplegable

\n\n

Imagina que estás escribiendo una aplicación para gestionar tareas. Necesitas mostrar al usuario una lista de estados posibles en un menú desplegable. Así se hace con enumeración de enum:

\n\n
using System;\nusing System.Collections.Generic;\n\npublic class TaskManager\n{\n    public enum TaskStatus\n    {\n        NotStarted,\n        InProgress,\n        WaitingForReview,\n        Done\n    }\n\n    publ                

Blogs

Book Recommendations