MDBF Logo MDBF

C# Enum as String: Como Converter Enums em Strings no C#

Artigos

Na programação em C#, os enums (ou enumerações) são utilizados para definir conjuntos de valores nomeados de forma clara e estruturada. Por exemplo, representar os dias da semana, status de uma solicitação ou categorias de produtos. No entanto, muitas vezes é necessário converter esses valores de enum em suas versões em string, especialmente em cenários como exibição na interface do usuário, exportação de dados ou serialização.

Neste artigo, abordaremos de forma completa como trabalhar com conversões de enums para strings no C#, apresentando diferentes técnicas, boas práticas e sugestões de uso.

c-enum-as-string

Por que Converter Enums em String?

Converter enums para strings traz várias vantagens, incluindo:

  • Melhoria na legibilidade e entendimento do código.
  • Facilitação na exibição de valores amigáveis aos usuários.
  • Compatibilidade na comunicação via APIs ou sistemas externos.
  • Simplificação na serialização e desserialização de dados.

Segundo Scott Hanselman, renomado desenvolvedor de software, "Entender como converter tipos é fundamental para criar aplicativos flexíveis e compreensivos."

Como Converter Enum para String no C

Existem diversas formas de realizar a conversão de enum para string em C#. A seguir, apresentaremos os métodos mais utilizados e suas aplicações.

Método 1: Usando ToString()

O método mais direto para converter um enum para sua representação em string é o método [enum].ToString().

public enum Status{    Pending,    Approved,    Rejected}Status currentStatus = Status.Approved;string statusString = currentStatus.ToString();Console.WriteLine(statusString); // Saída: Approved

Vantagens:- Simples e direto.- Não requer configurações adicionais.

Limitações:- Retorna exatamente o nome do enum sem formatação amigável.

Método 2: Usando Enum.GetName()

Se você deseja obter o nome da constante de enum a partir de um valor, pode usar Enum.GetName().

int statusValue = 1; // Correspondente a Approvedstring statusName = Enum.GetName(typeof(Status), statusValue);Console.WriteLine(statusName); // Saída: Approved

Método 3: Usando Enum.Parse() e Enum.TryParse()

Para converter uma string de volta para um valor de enum, você pode usar Enum.Parse() ou Enum.TryParse().

string statusStr = "Rejected";if (Enum.TryParse<Status>(statusStr, out Status result)){    Console.WriteLine($"Conversão bem-sucedida: {result}");}else{    Console.WriteLine("Falha na conversão");}

Nota: Enum.TryParse() é mais seguro, pois evita exceções em caso de entrada inválida.

Método 4: Usando Attributes para Customização (Description)

Para exibir nomes mais amigáveis ao usuário, você pode utilizar o atributo [Description] do namespace System.ComponentModel.

Definindo Descrições

using System.ComponentModel;public enum Status{    [Description("Pendente")]    Pending,    [Description("Aprovado")]    Approved,    [Description("Rejeitado")]    Rejected}

Método para obter a descrição

using System.Reflection;public static string GetEnumDescription(Enum value){    FieldInfo fi = value.GetType().GetField(value.ToString());    DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);    if (attributes != null && attributes.Length > 0)        return attributes[0].Description;    else        return value.ToString();}Status status = Status.Pending;string friendlyName = GetEnumDescription(status);Console.WriteLine(friendlyName); // Saída: Pendente

Importante: Essa técnica é bastante útil para criar strings legíveis e personalizadas nos logs, interfaces ou relatórios.

Tabela de Métodos de Conversão

MétodoComo usarRetornaUso recomendado
ToString()enumVar.ToString()String com nome do enumQuando basta o nome padrão
Enum.GetName()Enum.GetName(typeof(EnumType), value)Nome do enum como stringPara buscar nome a partir de valor
Enum.Parse() / TryParse()Enum.TryParse<EnumType>(string, out value)Enum convertido de stringPara converter string de volta para enum
GetEnumDescription()Com atributos [Description]Descrição amigávelPara exibir nomes legíveis ao usuário

Como Tornar as Strings do Enum Mais Legíveis

Muitos desenvolvedores preferem exibir nomes mais amigáveis ou em outros idiomas ao converter enums. Além do uso do atributo [Description] mencionado, existem outras alternativas, como criar um Dictionary com mapeamentos ou usar pacotes como SmartEnum.

Exemplo de uso de atributos para descrição personalizada

// Código já apresentado na seção anterior

Dica: Sempre documente claramente o significado das descrições para facilitar manutenção e internacionalização.

Implementação prática: Converter enum para string e vice-versa

A seguir, apresentamos um exemplo completo com todas as técnicas abordadas:

using System;using System.ComponentModel;using System.Reflection;public enum Status{    [Description("Pendente")]    Pending,    [Description("Aprovado")]    Approved,    [Description("Rejeitado")]    Rejected}class Program{    static void Main()    {        Status status = Status.Approved;        // Usando ToString()        string str1 = status.ToString();        // Usando Enum.GetName()        string str2 = Enum.GetName(typeof(Status), status);        // Usando atributos Description        string str3 = GetEnumDescription(status);        Console.WriteLine($"ToString(): {str1}");        Console.WriteLine($"Enum.GetName(): {str2}");        Console.WriteLine($"Description attribute: {str3}");        // Converter string para enum        string input = "Rejected";        if (Enum.TryParse<Status>(input, out Status parsedStatus))        {            Console.WriteLine($"String '{input}' convertido para enum: {parsedStatus}");        }        else        {            Console.WriteLine($"Falha ao converter '{input}' para enum");        }    }    public static string GetEnumDescription(Enum value)    {        FieldInfo fi = value.GetType().GetField(value.ToString());        DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);        if (attributes != null && attributes.Length > 0)            return attributes[0].Description;        else            return value.ToString();    }}

Perguntas Frequentes (FAQs)

1. Como posso obter uma lista de todos os nomes de um enum?

Para listar todos os valores de um enum, utilize Enum.GetNames() ou Enum.GetValues().

string[] nomes = Enum.GetNames(typeof(Status));foreach (string nome in nomes){    Console.WriteLine(nome);}

2. Como posso criar uma função genérica para converter qualquer enum em string amigável?

Você pode criar um método genérico que verifica atributos [Description] ou retorna o nome padrão:

public static string GetFriendlyName<T>(T enumValue) where T : Enum{    return GetEnumDescription(enumValue as Enum);}

3. É possível usar pacotes externos para facilitar manipulações de enums?

Sim, existem bibliotecas como SmartEnum ou Enums.NET que proporcionam funcionalidades avançadas de manipulação de enums, incluindo suporte a descrições, description factories, entre outros.

Conclusão

Converter enums para strings é uma tarefa comum e essencial na programação em C#. Seja para exibir informações ao usuário, serializar dados ou criar interfaces mais legíveis, conhecer as diferentes técnicas e boas práticas garante um código mais eficiente e sustentável.

Lembre-se de aproveitar atributos personalizados como [Description] para criar nomes amigáveis e facilitar a manutenção do seu código em projetos mais complexos.

Com o entendimento das técnicas abordadas neste artigo, você poderá aplicar as melhores estratégias de conversão de enums em suas aplicações, otimizando desempenho e legibilidade.

Referências

Esperamos que este artigo tenha esclarecido suas dúvidas sobre como converter enums em strings no C#. Aproveite para aplicar as técnicas nos seus projetos e torná-los mais eficientes e amigáveis!