Comparteix a través de


Tipos de enumeración (referencia de C#)

Un tipo de enumeración (o tipo de enumeración) es un tipo de valor definido por un conjunto de constantes con nombre del tipo numérico entero subyacente. Para definir un tipo de enumeración, use la enum palabra clave y especifique los nombres de los miembros de enumeración:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

De forma predeterminada, los valores constantes asociados de los miembros de enumeración son de tipo int; comienzan con cero y aumentan en uno siguiendo el orden de texto de definición. Puede especificar explícitamente cualquier otro tipo numérico entero como un tipo subyacente de un tipo de enumeración. También puede especificar explícitamente los valores constantes asociados, como se muestra en el ejemplo siguiente:

enum ErrorCode : ushort
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

No se puede definir un método dentro de la definición de un tipo de enumeración. Para agregar funcionalidad a un tipo de enumeración, cree un método de extensión.

El valor predeterminado de un tipo E de enumeración es el valor generado por la expresión (E)0, incluso si cero no tiene el miembro de enumeración correspondiente.

Se usa un tipo de enumeración para representar una opción de un conjunto de valores mutuamente excluyentes o una combinación de opciones. Para representar una combinación de opciones, defina un tipo de enumeración como marcas de bits.

Tipos de enumeración como marcas de bits

Si desea que un tipo de enumeración represente una combinación de opciones, defina miembros de enumeración para esas opciones de forma que una opción individual sea un campo de bits. Es decir, los valores asociados de esos miembros de enumeración deben ser las potencias de dos. A continuación, puede usar los operadores lógicos a nivel de bits | o & para combinar o intersectar opciones, respectivamente. Para indicar que un tipo de enumeración declara campos de bits, aplique el atributo Flags a él. Como se muestra en el ejemplo siguiente, también puede incluir algunas combinaciones típicas en la definición de un tipo de enumeración.

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}

Para obtener más información y ejemplos, consulte la System.FlagsAttribute página de referencia de API y la sección Miembros no exclusivos y el atributo Flags de la página de referencia de API System.Enum.

El tipo System.Enum y la restricción de enumeración

El System.Enum tipo es la clase base abstracta de todos los tipos de enumeración. Proporciona una serie de métodos para obtener información sobre un tipo de enumeración y sus valores. Para obtener más información y ejemplos, consulte la página de referencia de api System.Enum .

Puede usar System.Enum en una restricción de clase base (conocida como restricción de enumeración) para especificar que un parámetro de tipo es un tipo de enumeración. Cualquier tipo de enumeración también satisface la struct restricción , que se usa para especificar que un parámetro de tipo es un tipo de valor que no acepta valores NULL.

Conversiones

Para cualquier tipo de enumeración, existen conversiones explícitas entre el tipo de enumeración y su tipo entero subyacente. Si convierte (usacast) un valor de enumeración a su tipo subyacente, el resultado es el valor entero asociado de un miembro de enumeración.

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

public class EnumConversionExample
{
    public static void Main()
    {
        Season a = Season.Autumn;
        Console.WriteLine($"Integral value of {a} is {(int)a}");  // output: Integral value of Autumn is 2

        var b = (Season)1;
        Console.WriteLine(b);  // output: Summer

        var c = (Season)4;
        Console.WriteLine(c);  // output: 4
    }
}

Use el Enum.IsDefined método para determinar si un tipo de enumeración contiene un miembro de enumeración con el valor asociado determinado.

Para cualquier tipo de enumeración, existen conversiones boxing y unboxing a y desde el tipo System.Enum, respectivamente.

Especificación del lenguaje C#

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

Consulte también