Convertendo string para Enum em C#: guia com exemplos para código flexível

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como transformar string em enum em C#: do iniciante ao profissional



Todo desenvolvedor C#, mais cedo ou mais tarde, enfrenta a situação de precisar transformar uma string comum em uma enumeração (enum). Você recebe dados de JSON, lê configurações de um arquivo de configuração ou recebe um comando do usuário — e aí está uma string, enquanto o código espera um enum. Sem a conversão correta, você corre o risco de obter uma exceção ou, pior ainda, um erro imperceptível na lógica.



Neste artigo, abordaremos a conversão de string para enum em C#, desde métodos simples até técnicas avançadas. Você aprenderá como fazer parsing seguro de strings, tratar erros e escrever código elegante. O material é baseado em perguntas reais do Stack Overflow — o tópico acumulou milhares de visualizações por um motivo.



Vamos nessa!



Por que converter string para enum é uma tarefa comum



Enumerações em C# são uma ferramenta poderosa para criar código legível e type-safe. Mas o mundo externo geralmente trabalha com strings: APIs retornam "Admin", usuários digitam "readonly", bancos de dados armazenam "Pending". Para conectar esses mundos, é necessária a conversão de string para enum C#.



Vamos considerar cenários típicos:

  • Desserialização de JSON — o campo de status chega como string
  • Parsing de argumentos de linha de comando
  • Leitura de configurações do appsettings.json
  • Processamento de entrada do usuário em formulários web


Sem a abordagem correta, você terá uma exceção ou bugs difíceis de detectar. Vamos explorar as ferramentas disponíveis.



Método básico: Enum.Parse — rápido e simples



A maneira mais conhecida de converter string para enum em C# é o método Enum.Parse. Ele existe desde as primeiras versões do .NET e ainda é amplamente utilizado.



using System;

public enum UserRole{ Admin, Moderator, User, Guest}

class Program{ static void Main() { string input = "Admin"; UserRole role = (UserRole)Enum.Parse(typeof(UserRole), input); Console.WriteLine(role); // Saída: Admin }}


Aqui, fazemos um cast explícito do resultado para o tipo desejado, pois Enum.Parse retorna um object. O método diferencia maiúsculas de minúsculas: a string "admin" geraria uma exceção. Se você não tiver certeza sobre a capitalização, adicione um terceiro parâmetro:



UserRole role = (UserRole)Enum.Parse(typeof(UserRole), input, ignoreCase: true);


Agora, "admin", "ADMIN" e até "AdMiN" serão convertidos corretamente. Mas há um detalhe: se a string não corresponder a nenhum valor do enum, você receberá um ArgumentException. E isso significa que o programa irá falhar.



Quando Enum.Parse é uma má escolha

  • Você não controla os dados de entrada (entrada do usuário)
  • A string pode ser null ou vazia
  • Você deseja evitar exceções


Para esses casos, foi criado o Enum.TryParse.



Abordagem segura: Enum.TryParse — sem exceções



Enum.TryParse em C# é seu salva-vidas. Ele não lança exceções, mas retorna um bool: true se a conversão for bem-sucedida e false caso contrário.



string input = "Moderator";if (Enum.TryParse(input, ignoreCase: true, out UserRole result)){    Console.WriteLine($"Função: {result}");}else{    Console.WriteLine("Não foi possível reconhecer a função");}


Observe: TryParse é um método genérico, portanto não é necessário fazer cast do resultado. O parâmetro ignoreCase funciona da mesma forma que no Parse. Este método é ideal para parsing seguro de enum em C#.



Mas há uma armadilha: TryParse considera bem-sucedido o parsing de strings numéricas. A string "42" será convertida para o valor do enum com equivalente numérico 42, mesmo que esse valor não exista. Para evitar isso, adicione

Blogs

Book Recommendations