English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Enumerado (Enum) do C#

No C#, enum (tipo de enumeração) é usado para atribuir nomes de constante a um grupo de valores inteiros. Isso torna os valores de constante mais legíveis, por exemplo, WeekDays.Monday é mais legível ao referir-se a um dia da semana do que o número 0.

As enumerações são definidas diretamente usando a palavra-chave enum dentro de um espaço de nomes, classe ou estrutura. Todos os nomes de constantes podem ser declarados dentro dos colchetes curly e separados por vírgulas. Abaixo está definida a enumeração de dias úteis.

enum WeekDays
{
    Monday
    Tuesday
    Wednesday
    Quinta-feira,
    Sexta-feira,
    Sábado,
    Domingo
}

Acima, a enumeração WeekDays declara membros em cada linha, separados por vírgulas.

Valores de enumeração

Se não for atribuído valor a um membro de enumeração, o compilador atribuirá automaticamente valores inteiros (começando com zero) a cada membro. O primeiro membro da enumeração será 0, e o valor de cada membro subsequente da enumeração aumentará1.

enum WeekDays
{
    Monday     // 0
    Tuesday    // 1
    Wednesday  // 2
    Quinta-feira,   // 3
    Sexta-feira,     // 4
    Sábado,   // 5
    Domingo      // 6
}

Pode-se atribuir valores diferentes a membros de enumeração. A alteração do valor padrão dos membros de enumeração será automaticamente atribuída incrementalmente aos outros membros.

enum Categories
{
    Electronics,    // 0
    Food,           // 1
    Automotive = 6, // 6
    Arts,           // 7
    BeautyCare,     // 8
    Fashion         // 9
}

Pode-se até atribuir valores diferentes a cada membro.

enum Categories
{
    Electronics = 1,  
    Food = 5, 
    Automotive = 6, 
    Arts = 10, 
    BeautyCare = 11, 
    Fashion = 15,
    WomanFashion = 15
}

As enumerações podem ser de qualquer tipo de dados numéricos, por exemplo byte, sbyte, short, ushort, int, uint, long ou ulong. Mas, as enumerações não podem ser de tipo string.

Após o nome do enum, especificar o tipo como :type. Abaixo está definida a enumeração de bytes.

enum Categories: byte
{
    Electronics = 1,  
    Food = 5, 
    Automotive = 6, 
    Arts = 10, 
    BeautyCare = 11, 
    Fashion = 15
}

Acesso a um membro de enumeração

Pode-se usar a sintaxe de ponto: enum.membro para acessar a enumeração

enum WeekDays
{
    Monday 
    Tuesday
    Wednesday
    Quinta-feira, 
    Sexta-feira, 
    Sábado,
    Domingo 
}
Console.WriteLine(WeekDays.Monday); // Segunda-feira
Console.WriteLine(WeekDays.Tuesday); // Terça-feira
Console.WriteLine(WeekDays.Wednesday); // Quarta-feira
Console.WriteLine(WeekDays.Thursday); // Quarta-feira
Console.WriteLine(WeekDays.Friday); // Quinta-feira
Console.WriteLine(WeekDays.Saturday); // Sábado
Console.WriteLine(WeekDays.Sunday); // Domingo

Conversão de enumeração

A conversão de um tipo de enumeração para seu tipo de inteiro básico requer conversão explícita.

enum WeekDays
{
    Monday 
    Tuesday
    Wednesday
    Quinta-feira, 
    Sexta-feira, 
    Sábado,
    Domingo 
}
Console.WriteLine(WeekDays.Friday); //Saída: Sexta-feira 
int day = (int) WeekDays.Friday; // Conversão de enum para int
Console.WriteLine(day); //Saída:4 
var wd = (WeekDays) 5; // Conversão de int para enum
Console.WriteLine(wd);//Saída: Sábado

enum é uma classe abstrata.