Cómo iterar sobre todos los valores de Enum en C#: guía completa con ejemplos

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

Cómo iterar sobre todos los valores de Enum en C#: de principiante a profesional

\n\n

Imagina esta situación: estás escribiendo un juego en C# y tienes una enumeración Difficulty con niveles de dificultad: Easy, Normal, Hard, Insane. Necesitas mostrarlos todos en un menú de selección, o, digamos, crear una lista desplegable para un configurador. ¿Cómo hacerlo? ¿Escribir manualmente un array de strings? ¿Y si mañana se agrega un nuevo nivel? Tendrías que meterte en el código y cambiarlo en tres lugares.

\n\n

Afortunadamente, en C# hay una solución elegante. La pregunta "How to loop through all enum values in C#?" es una de las más populares en Stack Overflow (cientos de miles de visitas). Y hoy la analizaremos por completo. Aprenderás no una, sino 4 formas de iterar sobre valores enum, entenderás cuándo usar cada una y obtendrás código listo para copiar en tu proyecto.

\n\n

¡Allá vamos!

\n\n
\n\n

¿Qué es Enum en C# y por qué iterar sobre él?

\n\n

Enum (enumeración) es un conjunto de constantes con nombre. En lugar de recordar que 0 = Easy, 1 = Normal, 2 = Hard, simplemente escribes Difficulty.Easy. El código se vuelve legible y seguro.

\n\n

Pero cuando en un proyecto hay 10-20 valores enum, tarde o temprano surge la tarea: obtenerlos todos. Por ejemplo:

\n
    \n
  • Rellenar un ComboBox o Dropdown en la interfaz de usuario.
  • \n
  • Crear datos de prueba para todas las variantes.
  • \n
  • Aplicar atributos a cada valor.
  • \n
  • Comparar dos conjuntos enum.
  • \n
\n\n

En lugar de escribir:

\n
string[] names = { "Easy", "Normal", "Hard", "Insane" };
\n\n

…usamos reflexión y métodos integrados de .NET. Es flexible, escalable y no requiere actualización manual.

\n\n
\n\n

Forma 1: La clásica — Enum.GetValues (la más popular)

\n\n

Esta es la respuesta que encontrarás en Stack Overflow con más votos. El método Enum.GetValues(typeof(YourEnum)) devuelve un array con todos los valores de una enumeración específica.

\n\n

Ejemplo de código:

\n
using System;\n\npublic enum Difficulty\n{\n    Easy,\n    Normal,\n    Hard,\n    Insane\n}\n\nclass Program\n{\n    static void Main()\n    {\n        Console.WriteLine("Todos los niveles de dificultad:");\n        \n        // Obtenemos el array de valores del enum\n        Difficulty[] allDifficulties = (Difficulty[])Enum.GetValues(typeof(Difficulty));\n        \n        foreach (Difficulty level in allDifficulties)\n        {\n            Console.WriteLine($"Nivel: {level} (valor numérico: {(int)level})");\n        }\n    }\n}
\n\n

Salida en consola:

\n
Todos los niveles de dificultad:\nNivel: Easy (valor numérico: 0)\nNivel: Normal (valor numérico: 1)\nNivel: Hard (valor numérico: 2)\nNivel: Insane (valor numérico: 3)
\n\n

Importante: Enum.GetValues devuelve un array de tipo Array, por lo que debes convertirlo explícitamente a tu tipo enum. A partir de .NET 5, apareció la versión genérica: Enum.GetValues<Difficulty>(), que es un poco más cómoda.

\n\n
// .NET 5+ \nDifficulty[] allDifficulties = Enum.GetValues<Difficulty>();\nforeach (var level in allDifficulties)\n{\n    Console.WriteLine(level);\n}
\n\n
\n\n

Forma 2: Obtener nombres mediante Enum.GetNames

\n\n

A veces necesitas no los valores en sí, sino sus nombres como strings (por ejemplo, para la interfaz de usuario). Para eso está Enum.GetNames. Devuelve un array de strings.

\n\n

Ejemplo:

\n
string[] names = Enum.GetNames(typeof(Difficulty));\nConsole.WriteLine("Nombres de los niveles:");\nforeach (string name in names)\n{\n    Console.WriteLine(name);\n}
\n\n

Salida:

\n
Nombres de los niveles:\nEasy\nNormal\nHard\nInsane
\n\n

¿Cuándo usarlo? Cuando necesites específicamente strings (por ejemplo, para mostrarlos en la interfaz o para registro), y no las constantes enum en sí.

Blogs

Book Recommendations