Cómo enumerar un Enum en C#

Payel Ganguly 12 octubre 2023
  1. Enum.GetNames() Método para enumerar el enum
  2. Enum.GetValues() Método para enumerar enum en C#
  3. Más ejemplos
  4. Observaciones:
Cómo enumerar un Enum en C#

Este tutorial introduce cómo enumerar un tipo de enum en C# y lo demuestra a través de una lista de ejemplos de código.

En el tutorial anterior, hemos aprendido a recuperar el valor int de enum usando C#. Como se mencionó en el último tutorial, Enumeración o enum es un tipo de valor definido por el usuario que define un conjunto de constantes nombradas del tipo entero subyacente.

Sabemos que la sintaxis común para enum es la siguiente:

enum<enum_name> { enumeration_list }
;

enum_name especifica el nombre del tipo de enumeración, y enumeration_list especifica una lista de identificadores separados por comas.

A continuación, veremos cómo pasar en bucle o enumerar todos los valores de enum en C#. Hay varias maneras de enumerar un enum. Los siguientes ejemplos ilustrarán estas formas.

Enum.GetNames() Método para enumerar el enum

El objetivo es obtener una serie de nombres de las constantes de la enumeration_list usando el método Enum.GetName(). Imprime el array de nombres usando el bucle foreach.

using System;

public class Example1 {
  public enum Fruits { Apple, Banana, Orange, Watermelon, Mango, Strawberry }

  public static void Main() {
    foreach (string fruit in Enum.GetNames(typeof(Fruits))) {
      Console.WriteLine(fruit);
    }
  }
}

Resultado:

Apple Banana Orange Watermelon Mango Strawberry

Enum.GetValues() Método para enumerar enum en C#

Otra aproximación es usar el método Enum.GetValues() que recupera un conjunto de los valores de las constantes en la enumeration_list. También imprime cada valor usando el bucle foreach.

using System;

public class Example2 {
  public enum Subjects { Maths, Biology, English, Chemistry, Physics, History }

  public static void Main() {
    foreach (Subjects sub in Enum.GetValues(typeof(Subjects))) {
      Console.WriteLine(sub);
    }
  }
}

Resultado:

Maths Biology English Chemistry Physics History

Discutamos algunos ejemplos más para obtener una imagen completa del uso del método Enum.GetValues().

Más ejemplos

Ejemplo 1:

using System;

public class Demo1 {
  enum Colors { White, Black, Red, Green, Blue }
  ;
  enum Planets { Earth = 0, Jupiter = 10, Saturn = 20, Mars = 30, Venus = 40 }
  ;

  public static void Main() {
    Console.WriteLine("The list of Colors Enum are:");
    foreach (int i in Enum.GetValues(typeof(Colors))) Console.WriteLine(i);

    Console.WriteLine();

    Console.WriteLine("The list of Planets Enum are:");
    foreach (int i in Enum.GetValues(typeof(Planets))) Console.WriteLine(i);
  }
}

Resultado:

The list of Colors Enum are : 0 1 2 3 4

    The list of Planets Enum are : 0 10 20 30 40

En la primera parte del ejemplo anterior, los elementos del array están ordenados por los valores binarios (es decir, los valores sin signo) de las constantes de enumeration.

Ejemplo 2:

using System;

enum SignValue { NegativeVal = -1, ZeroVal = 0, PositiveVal = 1 }
;

public class MainValue {
  public static void Main() {
    foreach (var val in Enum.GetValues(typeof(SignValue))) {
      Console.WriteLine("{0,3} 0X{0:X8} {1}", (int)val, ((SignValue)val));
    }
  }
}

Resultado:

0 ZeroVal 0X00000000 1 PositiveVal 0X00000001 - 1 NegativeVal 0XFFFFFFFF

El ejemplo anterior muestra información sobre el array devuelta por el método Enum.GetValues() para la enumeration_list que incluye valores cero, negativos y positivos.

Observaciones:

El método Enum.GetValues() devuelve un array que contiene un valor para cada elemento del enum. si varios elementos tienen el mismo valor, el array generada incluye valores duplicados. En este caso, llamar al método Enum.GetNames() con cada valor del array devuelta no restaura los nombres únicos asignados a los elementos que tienen valores duplicados. Para recuperar con éxito los nombres de todos los miembros de la enumeración, recomendamos llamar al método Enum.GetNames().

Artículo relacionado - Csharp Enum