Compartilhar via


enum (Referência de C#)

O enum palavra-chave é usada para declarar uma enumeração, um tipo distinto que consiste em um conjunto de constantes nomeadas denominada lista de enumerador.

Geralmente é melhor definir um enum dentro de um namespace para que todas as classes no namespace possam acessá-lo com a conveniência de igual. No entanto, um enum também pode ser aninhado em class ou struct.

Por padrão, o primeiro enumerador tem o valor 0 e o valor de cada enumerador sucessiva aumenta em 1. Por exemplo, na enumeração seguinte, Sat é 0, Sun é 1, Mon é 2, e assim por diante.

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

Enumeradores podem usar os inicializadores para substituir os valores padrão, conforme mostrado no exemplo a seguir.

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

Desta enumeração, a seqüência dos elementos é forçada para iniciar a partir de 1 em vez de 0. No entanto, incluindo uma constante que tem o valor 0 é recomendado. Para obter mais informações, consulte Tipos de enumeração (Guia de Programação em C#).

Cada tipo de enumeração tem um tipo subjacente, o que pode ser qualquer tipo integral, exceto char. O tipo subjacente de elementos de enumeração de padrão é int. Para declarar um enum de outro tipo integral, tais como bytes, use uma vírgula após o identificador seguido do tipo, conforme mostrado no exemplo a seguir.

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

The approved types for an enum are byte, sbyte, short, ushort, int, uint, long, or ulong.

Uma variável do tipo Days pode ser atribuído qualquer valor no intervalo do tipo subjacente; os valores não são limitados às constantes nomeadas.

O valor padrão de um enum E é o valor produzido pela expressão (E)0.

Dica

Um enumerador não pode conter espaços em branco em seu nome.

O tipo subjacente Especifica a quantidade de armazenamento é alocado para cada enumerador. No entanto, uma conversão explícita é necessário converter de enum tipo de tipo integral. Por exemplo, a instrução a seguir atribui o enumerador Sun a uma variável do tipo int , usando uma conversão para converter de enum para int.

int x = (int)Days.Sun;

Quando você aplica FlagsAttribute em uma enumeração que contém elementos que podem ser combinados com um bit a bit OR operação, o atributo afeta o comportamento da enum quando ele é usado com algumas ferramentas. Você pode observar essas alterações quando você usa ferramentas como o Console o avaliador da expressão e métodos de classe. (Consulte o terceiro exemplo).

Programação robusta

Assim como acontece com qualquer constante, todas as referências para os valores individuais de um enum são convertidas em literais numéricos em tempo de compilação. Isso pode criar possíveis problemas de versionamento, conforme descrito em Constantes (Guia de Programação em C#).

Atribuindo valores adicionais para novas versões de enums ou alterando os valores dos membros enum em uma nova versão, pode causar problemas para o código-fonte dependentes. Valores de enumeração são freqüentemente usados em Alternar instruções. Se os elementos adicionais foram adicionados para o enum pode ser selecionado o tipo, a seção padrão da instrução switch inesperadamente.

Se outros desenvolvedores usam seu código, você deve fornecer diretrizes sobre como o seu código deve reagir se novos elementos são adicionados a qualquer enum tipos.

Exemplo

No exemplo a seguir, uma enumeração, Days, é declarada. Dois enumeradores explicitamente são convertidas em inteiro e atribuídos a variáveis de inteiro.

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

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

No exemplo a seguir, a opção tipo de base é usada para declarar um enum cujos membros são do tipo long. Observe que, mesmo que o tipo subjacente da enumeração long, os membros de enumeração ainda devem ser explicitamente convertidos no tipo long usando a projeção.

public class EnumTest2
{
    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);
    }
}
/* Output:
   Max = 2147483648
   Min = 255
*/

O exemplo de código a seguir ilustra o uso e o efeito do FlagsAttribute de atributo em um enum declaração.

// Add the attribute Flags or FlagsAttribute.
[Flags]
public enum CarOptions
{
    // The flag for SunRoof is 0001.
    SunRoof = 0x01,
    // The flag for Spoiler is 0010.
    Spoiler = 0x02,
    // The flag for FogLights is 0100.
    FogLights = 0x04,
    // The flag for TintedWindows is 1000.
    TintedWindows = 0x08,
}

class FlagTest
{
    static void Main()
    {
        // The bitwise OR of 0001 and 0100 is 0101.
        CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;

        // Because the Flags attribute is specified, Console.WriteLine displays 
        // the name of each enum element that corresponds to a flag that has 
        // the value 1 in variable options.
        Console.WriteLine(options);
        // The integer value of 0101 is 5.
        Console.WriteLine((int)options);
    }
}
/* Output:
   SunRoof, FogLights
   5
*/

Comentários

Se você remover Flags, o exemplo exibe os seguintes valores:

5

5

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Palavras-chave C#

Tabela de tipos integrais (Referência de C#)

Tabela de tipos internos (Referência de C#)

Tabela de conversões numéricas implícitas (Referência de C#)

Tabela de conversões numéricas explícitas (Referência de C#)

Conceitos

Tipos de enumeração (Guia de Programação em C#)

Outros recursos

Referência de C#