EnumsEnums

Um tipo enum é um tipo de valor diferente com um conjunto de constantes nomeadas.An enum type is a distinct value type with a set of named constants. Você define enums quando precisa definir um tipo que pode ter um conjunto de valores discretos.You define enums when you need to define a type that can have a set of discrete values. Eles usam um dos tipos de valor integral como o armazenamento subjacente.They use one of the integral value types as their underlying storage. Eles fornecem um significado semântico aos valores discretos.They provide semantic meaning to the discrete values.

O exemplo a seguir declara e usa um tipo enum chamado Color com três valores de constantes, Red, Green e Blue.The following example declares and uses an enum type named Color with three constant values, Red, Green, and Blue.

using System;
enum Color
{
    Red,
    Green,
    Blue
}
class EnumExample
{
    static void PrintColor(Color color) 
    {
        switch (color) 
        {
            case Color.Red:
                Console.WriteLine("Red");
                break;
            case Color.Green:
                Console.WriteLine("Green");
                break;
            case Color.Blue:
                Console.WriteLine("Blue");
                break;
            default:
                Console.WriteLine("Unknown color");
                break;
        }
    }
    static void Main() 
    {
        Color c = Color.Red;
        PrintColor(c);
        PrintColor(Color.Blue);
    }
}

Cada tipo enum tem um tipo integral correspondente chamado de tipo subjacente do tipo enum.Each enum type has a corresponding integral type called the underlying type of the enum type. Um tipo enum que não declara explicitamente um tipo subjacente tem um tipo subjacente de int.An enum type that does not explicitly declare an underlying type has an underlying type of int. Um formato de armazenamento do tipo enum e o intervalo de valores possíveis são determinados pelo seu tipo subjacente.An enum type’s storage format and range of possible values are determined by its underlying type. O conjunto de valores que um tipo enum pode lidar não é limitado pelos seus membros enum.The set of values that an enum type can take on is not limited by its enum members. Em particular, qualquer valor do tipo subjacente de um enum pode ser convertido em um tipo enum e é um valor válido diferente do que o do tipo enum.In particular, any value of the underlying type of an enum can be cast to the enum type and is a distinct valid value of that enum type.

O exemplo a seguir declara um tipo enum chamado Alignment com um tipo subjacente de sbyte.The following example declares an enum type named Alignment with an underlying type of sbyte.

enum Alignment: sbyte
{
    Left = -1,
    Center = 0,
    Right = 1
}

Conforme mostrado no exemplo anterior, uma declaração de membro enum pode incluir uma expressão constante que especifica o valor do membro.As shown by the previous example, an enum member declaration can include a constant expression that specifies the value of the member. O valor da constante para cada membro enum deve estar no intervalo do tipo subjacente do enum.The constant value for each enum member must be in the range of the underlying type of the enum. Quando uma declaração de membro enum não especifica explicitamente um valor, o membro recebe o valor zero (se ele é o primeiro membro no tipo enum) ou o valor do membro enum textualmente precedente mais um.When an enum member declaration does not explicitly specify a value, the member is given the value zero (if it is the first member in the enum type) or the value of the textually preceding enum member plus one.

Os valores Enum podem ser convertidos em valores integrais e vice-versa usando conversões de tipo.Enum values can be converted to integral values and vice versa using type casts. Por exemplo:For example:

int i = (int)Color.Blue;    // int i = 2;
Color c = (Color)2;         // Color c = Color.Blue;  

O valor padrão de qualquer tipo enum é o valor integral zero convertido para o tipo enum.The default value of any enum type is the integral value zero converted to the enum type. Em casos nos quais as variáveis são inicializadas automaticamente como um valor padrão, esse é o valor fornecido para variáveis de tipos enum.In cases where variables are automatically initialized to a default value, this is the value given to variables of enum types. Para que o valor padrão de um tipo enum fique facilmente disponível, o 0 literal é convertido implicitamente para qualquer tipo enum.In order for the default value of an enum type to be easily available, the literal 0 implicitly converts to any enum type. Dessa forma, o seguinte é permitido.Thus, the following is permitted.

Color c = 0;