Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Declarar um enum
  2. Casting de enum
  3. Recuperando valor e nome
  4. Percorrer um enum
  5. Comparando enumeradores
  6. Tipos de dados aceitos
  7. Parâmetro/argumento e retorno
  8. Métodos da classe Enum

O tipo enum é composto de um ou mais constantes que são declaradas como seus membros. Um enumerador em C# pode ser criado dentro de classes ou arquivos .cs.

O uso de enumeradores com o comando switch para ser visto em C#: Comando de Escolha. O termo modificador de acesso utilizado nas sintaxes abaixo podem ser vistos em C# POO: Atributos e Encapsulamento

Abaixo, a sintaxes A e B mostram a definição de um enumerador e seu uso na declaração de uma variável respectivamente.

Sintaxe A
modificador_acesso enum nome_enumerador
{
  MEMBRO1,
  MEMBRO2,
  MEMBRON
};
Sintaxe B
nome_enumerador nome_variavel; //valor padrão MEMBRO1
nome_enumerador nome_variavel = nome_enumerador.membro_enumerador;

Os membros do enum, quando não iniciados, tem seus membros iniciados com valores que vão de 0 a N, de acordo com o número de membros.

Sintaxe C
modificador_acesso enum nome_enumerador
{
  MEMBRO1, //0
  MEMBRO2, //1
  MEMBRON  //2
};

Quando um membro é iniciado, os membros seguintes, sem valor, são associados aos valores incrementados:

Sintaxe D
modificador_acesso enum nome_enumerador
{
  MEMBRO1 = 1, 
  MEMBRO2,//2
  MEMBRO3 //3
};

O valores associados a membros do enum podem ser compostos de expressões, valores hexadecimais e binários, ou até mesmo composto de outros membros:

Sintaxe E
modificador_acesso enum nome_enumerador
{
  MEMBRO1 = expressao,
  MEMBRO2 = 0bvalor_binario, //2
  MEMBRON = MEMBRO1|MEMBRO2
};
Exemplo 1
public enum Enum1 
{
    Zero, //0
    Um, //1
    Dois, //2
    Tres //3
}
    
public enum Enum2 
{
    OPCAOA = 0, 
    OPCAOB, //1
    OPCAOC= 4, 
    OPCAOD//5
}
    
public enum Enum3
{
    Item1 = 0x00, //hexa
    Item2 =0b1000, //bin
    Item3 = 2*2, //expressão
    Item4 = Enum1.Zero|Enum1.Um, //ou bit-a-bit
    Item5 = 100
}
Saída
-

O casting de enum é feito utilizando o operador () que recebe como argumento o tipo do enum ou tipo de dado numérico (byte,short, int, long) ao qual desejamos converter.

Sintaxe
nome_enumerador nome_variavel = (nome_enumerador)valor_inteiro ou nome_variavel;

tipo_inteiro = (tipo_inteiro)variavel_enumerador ou enumerador.nome_membro;
Exemplo 2
using System;		
public class Program
{
    public enum Enum1 
    {   
        Zero, //0
        Um, //1
        Dois, //2
        Tres //3
    }
    
	public static void Main()
	{
        Enum1 enum = Enum1.Zero;
        int valor = (int)enum; //enum -> int
        Console.WriteLine(valor);
        enum = (Enum1)2;// int -> enum
        Console.WriteLine(enum);
	}
}
Saída
0
Dois

Para recuperarmos o nome ou valor de um membro, utilizamos os métodos Enum.GetName ou Enum.Parse. O primeiro retorna o nome do membro baseado em seu valor, e o segundo retorna o valor de um membro baseado em seu nome.

Sintaxe
string Enum.GetName(typeof(nome_enumerador), valor_membro);

(tipo_numerico)Enum.Parse(typeof(nome_enumerador), "nome_membro")
Exemplo 3
using System;		
public class Program
{
    public enum Enum1 
    {   
        Zero, //0
        Um, //1
        Dois, //2
        Tres //3
    }
    
	public static void Main()
	{
        string nome = Enum.GetName(typeof(Enum1), 3);
        Console.WriteLine(nome);
                
        //valor por nome
        int opcao = (int)Enum.Parse(typeof(Enum1), "Tres");
        Console.WriteLine(opcao);
	}
}
Saída
Tres
3

A iteração sobre os membros de um enumerador pode ser feita utilizando o comando Comandos de Repetição: foreach em conjunto com os métodos GetValues e GetNames da classe Enum. O primeiro método retorna todos os valores e o segundo todos os nomes dos membros.

Exemplo 4
using System;		
public class Program
{
    public enum Enum1 
    {   
        Zero, //0
        Um, //1
        Dois, //2
        Tres //3
    }
    
	public static void Main()
	{
        //loop nos valores
        foreach (int i in Enum.GetValues(typeof(Enum1)))
            Console.Write(i);
        Console.WriteLine();

        //loop nos nomes
        foreach (string i in Enum.GetNames(typeof(Enum1)))
            Console.Write(i);
	}
}
Saída
0123
ZeroUmDoisTres

Os enumeradores em C# podem ser comparados utilizando os operadores relacionais e os métodos CompareTo e Equals.

Sintaxe:
var_enum1 == var_enum2
var_enum1 != var_enum2
var_enum1 >= var_enum2
var_enum1 <= var_enum2
var_enum1 > var_enum2
var_enum1 < var_enum2

Enum.Equals(object? a, object? b);

var_enum.CompareTo(object? b)
Retorno
boolean como resultado das comparações 
Exemplo 7
using System;

public enum Enum1 
{
    Zero, //0
    Um, //1
    Dois, //2
    Tres //3
}

public class HelloWorld
{
    public static void Main(string[] args)
    {
        Enum1 opcao1 = Enum1.Um;
		Enum1 opcao2 = Enum1.Dois;
		Enum1 opcao3 = Enum1.Tres;
		Enum1 opcao4 = Enum1.Um;
		
		Console.WriteLine(opcao1 == opcao4);
		Console.WriteLine(opcao1 != opcao4);
		Console.WriteLine(opcao2 >= opcao1);
		Console.WriteLine(opcao2 > opcao4);
		
		Console.WriteLine(Enum.Equals(opcao1,opcao4));
    }
}
Saída
True
False
True
True
True

Além do básico visto acima, .Net possui a classe Enum que possui métodos para trabalhar com enumeradores.

Tab. 1: Métodos Enum
Método Descrição
CompareTo Compara enumeradores Visitar
Equals Compara enumeradores Visitar
Format Converte um valor para string Visitar
GetHashCode - Visitar
GetName Retorna nome de membro Visitar
GetNames Retorna nomes de membros Visitar
GetTypeCode - Visitar
GetUnderlyingType - Visitar
GetValues Retorna valores de membros Visitar
GetValuesAsUnderlyingType - Visitar
HasFlag - Visitar
IsDefined Verifica sem membro do enum foi definido Visitar
Parse Converte string para enumerador Visitar
ToObject - Visitar
ToString Converte o valor de um membro para string Visitar
TryFormat - Visitar
TryParse Converte string para enumerador Visitar
  1. 07/08/2025 - revisão 2 - Ajustes: pontuais, links internos e sintaxes; Adição: objetivo 'Comparando'
  2. 14/10/2024 - revisão 1 - Correção: Ex. 2/3/4; Ajustes pontuais
  3. 07/03/2024 - versão inicial