Enum (translation from VPE for Csharp Reference)

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

Geralmente é melhor definir um enum diretamente em um espaço para nome, para que todas as classes no namespace podem acessá-lo com a conveniência igual.No entanto, um enum também pode ser aninhado em classe ou struct.

Por padrão, o primeiro enumerador tem o valor 0, e o valor de cada enumerador sucessiva aumenta em 1.Por exemplo:

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

Essa enumeração, Sat é 0, Sun é 1, Mon é 2, e assim por diante. Os enumeradores podem ter inicializadores para substituir os valores padrão.Por exemplo:

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

Nessa enumeração, a sequência de elementos é forçada a iniciar a partir de 1 em vez de 0. No entanto, é altamente recomendável que um enum contém uma constante com valor 0.Para obter mais informações, consulte Tipos de enumeração (guia de programação translation from VPE for Csharp).

Cada tipo de enumeração tem um tipo subjacente, que pode ser qualquer tipo integral exceto char.O tipo de base padrão dos elementos de enumeração é int.Para declarar um enum de outro tipo integral, tal sistema autônomo byte, use uma vírgula após o identificador seguido do tipo:

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

Os tipos de aprovado para um enum são byte, SByte, curto, ushort, int, uint, longo, or ULong.

Uma variável do tipo Days é possível atribuir qualquer valor no intervalo de tipo subjacente; os valores não estão limitados a constantes nomeadas.

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

Observação:

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

O tipo subjacente Especifica a quantidade de armazenamento é alocado para cada enumerador.No entanto, é necessário para converter de uma conversão explícitaenum Digite para um tipo integral. Por exemplo, a demonstrativo 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 System.FlagsAttribute para uma enumeração que contém alguns elementos combinados com um bit a bit OR operação, você irá notar que o atributo afeta o comportamento das enum Quando ele é usado com algumas ferramentas. Você pode observar essas alterações ao usar ferramentas sistema autônomo a Console classe métodos, o avaliador de expressões e assim por diante. (Consulte Exemplo 3).

Programação robusta

Assim sistema autônomo com qualquer constante, todas sistema autônomo referências para sistema autônomo valores individuais de um enum são convertidas em literais numéricos em time de compilar.Isso pode criar possíveis problemas de controle de controle de versão, conforme descrito em Constantes (guia de programação translation from VPE for Csharp).

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 dependentes código-fonte.Valores de enumeração são usados freqüentemente em comutador instruções.Se elementos adicionais foram adicionados à enum tipo, o teste para valores padrão pode retornar true inesperadamente.

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

Exemplo

Este exemplo, 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
*/

Neste exemplo, a opção de 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 seja long, os membros da 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 System.FlagsAttribute atributo em um enum declaração.

[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);
    }
}
/* Output:
   SunRoof, FogLights
   5
*/

Comentários

Observe que, se você remover FlagsAttribute, o exemplo produzirá o seguinte:

5

5

Especificação da linguagem C#

Para obter mais informações, consulte as seções a seguir no Especificação da linguagem C#:

  • 1.10 Enums

  • 6.2.2 Conversões de enumeração explícita

  • 14 Enums

Consulte também

Tarefas

Exemplo de atributos

Conceitos

Tipos de enumeração (guia de programação translation from VPE for Csharp)

Design de enumeração

Referência

Palavras-chave C#

Integral tabela Tipos (referência C#)

Tabela tipos internas (referência C#)

Numérico tabela Conversions (referência C#) implícita

Numérico tabela Conversions (referência C#) explícita 

Outros recursos

Referência C#