Esta documentación está archivada y no tiene mantenimiento.

enum (Referencia de C#)

La palabra clave enum se utiliza para declarar una enumeración, un tipo distinto que consiste en un conjunto de constantes con nombre denominado lista de enumeradores. Cada tipo de enumeración tiene un tipo subyacente, que puede ser cualquier tipo integral excepto char. El tipo predeterminado subyacente de los elementos de la enumeración es int. De forma predeterminada, el primer enumerador tiene el valor 0 y el valor de cada enumerador sucesivo se incrementa en 1. Por ejemplo:


      enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

En esta enumeración, Sat es 0, Sun es 1, Mon es 2 y así sucesivamente. Los enumeradores pueden tener inicializadores que reemplazan a los valores predeterminados. Por ejemplo:


      enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

En esta enumeración, se obliga a que la secuencia de elementos empiece en 1 en vez de en 0.

A una variable de tipo Days se le puede asignar cualquier valor en el intervalo del tipo subyacente; los valores no se limitan a las constantes con nombre.

El valor predeterminado de un enum E es el valor producido por la expresión (E)0.

NoteNota

Un enumerador no puede contener espacio en blanco en su nombre.

El tipo subyacente especifica el almacenamiento asignado para cada enumerador. No obstante, se necesita una conversión explícita para convertir un tipo enum a un tipo integral. Por ejemplo, la siguiente instrucción asigna el enumerador Sun a una variable de tipo int utilizando una conversión explícita para convertir de enum a int:

int x = (int)Days.Sun;

Cuando se aplica System.FlagsAttribute a una enumeración que contiene algunos elementos combinados con una operación OR bit a bit, se observará que el atributo afecta el comportamiento de enum cuando se utiliza con algunas herramientas. Se pueden observar estos cambios al utilizar herramientas tales como los métodos de la clase Console, el Evaluador de expresiones, etc. (Vea el ejemplo 3).

Asignar valores adicionales a nuevas versiones de enumeraciones o cambiar los valores de los miembros de enumeración en una nueva versión, puede producir problemas para el código fuente dependiente. Es común que los valores enum se utilicen en instrucciones switch y, si se han agregado elementos adicionales al tipo enum, la comprobación de los valores predeterminados puede devolver true de forma inesperada.

Si otros desarrolladores van a utilizar su código, es importante proporcionar instrucciones sobre cómo su código debe reaccionar si se agregan nuevos elementos a cualquier tipo enum.

En este ejemplo, se declara la enumeración Days. Dos enumeradores se convierten explícitamente en un número entero y se asignan a variables de número entero.

// keyword_enum.cs
// enum initialization:
using System;
public class EnumTest 
{
    enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

    static void Main() 
    {
        int x = (int)Days.Sun;
        int y = (int)Days.Fri;
        Console.WriteLine("Sun = {0}", x);
        Console.WriteLine("Fri = {0}", y);
    }
}

Resultados

Sun = 2
Fri = 7

En este ejemplo, la opción de tipo base se utiliza para declarar un enum cuyos miembros son del tipo long. Observe que a pesar de que el tipo subyacente de la enumeración es long, los miembros de la enumeración todavía deben convertirse explícitamente al tipo long mediante una conversión de tipos.

// keyword_enum2.cs
// Using long enumerators
using System;
public class EnumTest 
{
    enum Range :long {Max = 2147483648L, Min = 255L};
    static void Main() 
    {
        long x = (long)Range.Max;
        long y = (long)Range.Min;
        Console.WriteLine("Max = {0}", x);
        Console.WriteLine("Min = {0}", y);
    }
}

Resultados

Max = 2147483648
Min = 255

El ejemplo de código siguiente ilustra el uso y efecto del atributo System.FlagsAttribute en una declaración enum.

// enumFlags.cs
// Using the FlagsAttribute on enumerations.
using System;

[Flags]
public enum CarOptions
{
    SunRoof = 0x01,
    Spoiler = 0x02,
    FogLights = 0x04,
    TintedWindows = 0x08,
}

class FlagTest
{
    static void Main()
    {
        CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;
        Console.WriteLine(options);
        Console.WriteLine((int)options);
    }
}

Resultados

SunRoof, FogLights
5

Observe que si se quita el inicializador de Sat=1, el resultado será:

Sun = 1
Fri = 6

Observe que si elimina FlagsAttribute, el ejemplo generará lo siguiente:

5

5

Para obtener más información, vea las secciones siguientes de Especificación del lenguaje C#.

  • 1.10 Enumeraciones

  • 6.2.2 Conversiones explícitas de enumeración

  • 14 Enumeraciones

Mostrar: