Introducción a C#
Por Nacho Cabanes, versión 0.93 de 16-abr-2010

9.3. Enumeraciones

Cuando tenemos varias constantes, cuyos valores son números enteros, hasta ahora estamos dando los valores uno por uno, así:

const int LUNES = 0, MARTES = 1, 
  MIERCOLES = 2, JUEVES = 3, 
  VIERNES = 4, SABADO = 5, 
  DOMINGO = 6;

Hay una forma alternativa de hacerlo, especialmente útil si son números enteros consecutivos. Se trata de enumerarlos:

enum diasSemana { LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO,
    DOMINGO };

(Al igual que las constantes de cualquier otro tipo, se puede escribir en mayúsculas para recordar "de un vistazo" que son constantes, no variables)

La primera constante valdrá 0, y las demás irán aumentando de una en una, de modo que en nuestro caso valen:

LUNES = 0, MARTES = 1, MIERCOLES = 2, JUEVES = 3, VIERNES = 4,
  SABADO = 5, DOMINGO = 6

Si queremos que los valores no sean exactamente estos, podemos dar valor a cualquiera de las contantes, y las siguientes irán aumentando de uno en uno. Por ejemplo, si escribimos

enum diasSemana { LUNES=1, MARTES, MIERCOLES, JUEVES=6, VIERNES,
  SABADO=10, DOMINGO };

Ahora sus valores son:

LUNES = 1, MARTES = 2, MIERCOLES = 3, JUEVES = 6, VIERNES = 7,
  SABADO = 10, DOMINGO = 11

Un ejemplo básico podría ser

/*---------------------------*/
/*  Ejemplo en C#            */
/*  enum.cs                  */
/*                           */
/*  Ejemplo de enumeraciones */
/*                           */
/*  Introduccion a C#,       */
/*    Nacho Cabanes          */
/*---------------------------*/
 
using System;
 
public class enumeraciones
{
 
  enum diasSemana { LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO,
      DOMINGO };
 
  public static void Main() 
  {
 
    Console.Write("En la enumeracion, el miércoles tiene el valor: {0} ", 
      diasSemana.MIERCOLES);      
    Console.WriteLine("que equivale a: {0}", 
      (int) diasSemana.MIERCOLES);
 
    const int LUNES = 0, MARTES = 1, MIERCOLES = 2, JUEVES = 3, 
      VIERNES = 4, SABADO = 5, DOMINGO = 6; 
 
    Console.WriteLine("En las constantes, el miércoles tiene el valor: {0}", 
      MIERCOLES);    
 
  }
}
 

y su resultado será:


En la enumeracion, el miércoles tiene el valor: MIERCOLES que equivale a: 2
En las constantes, el miércoles tiene el valor: 2

Nosotros hemos usado enumeraciones muchas veces hasta ahora, sin saber realmente que lo estábamos haciendo. Por ejemplo, el modo de apertura de un fichero (FileMode) es una enumeración, por lo que escribimos FileMode.Open. También son enumeraciones los códigos de color de la consola (como ConsoleColor.Red) y las teclas de la consola (como ConsoleKey.Escape).

Nota: las enumeraciones existen también en otros lenguajes como C y C++, pero la sintaxis es ligeramente distinta: en C# es necesario indicar el nombre de la enumeración cada vez que se usen sus valores (como en diasSemana.MIERCOLES), mientras que en C se usa sólo el valor (MIERCOLES).