Os tipos Enum ou Enumeradores para o português, nos permitem criar listas mais claras em nosso código e facilitam e muito a nossa vida como desenvolvedores. Até mesmo para evitar erros de comparação e padronizar determinadas opções dentro de nosso código ou sistema, usamos os tipos Enum para facilitar esta leitura. Basicamente, os Enum são
Os tipos Enum ou Enumeradores para o português, nos permitem criar listas mais claras em nosso código e facilitam e muito a nossa vida como desenvolvedores.
Até mesmo para evitar erros de comparação e padronizar determinadas opções dentro de nosso código ou sistema, usamos os tipos Enum para facilitar esta leitura.
Basicamente, os Enum são listas enumeradas, tendo sempre uma chave e valor formando um único registro que irão identificar determinado item.
Com isto já deixe anotado que não é possível criar ou duplicar uma destas chaves dentro de um tipo Enum, sendo este registro único.
Neste artigo, irei demonstrar como que funciona para incluir uma descrição em cada registro do Enum utilizando o .NET C# (CSharp).
Mas isto pode ser aplicado em outras linguagens que dão suporte aos tipos Enum, sem maiores dificuldades.
Para quem está iniciando ou para quem ainda não sabe do que se trata, vejamos um exemplo de um enumerador simples:
public enum Cores
{
Azul = 1,
Vermelho = 2,
Verde = 3,
Amarelo = 4
}
No exemplo acima, criamos uma lista simples algumas cores que podem ser utilizadas no sistema, podendo ser útil em diversos pontos em nosso código.
Ao invés de fazer a chamada de um número para comparação que represente o dia da semana, por exemplo, você irá efetuar a comparação pelo Enum, fazendo a chamada da seguinte maneira:
Cores corEscolhida = Cores.Azul;
if (corEscolhida == Cores.Azul)
{
//Executa comando 1
}
else if (corEscolhida == Cores.Verde)
{
//Executa comando 2
}
Como criar uma descrição para o tipo Enum?
Quando representamos o Enum da forma como declaramos anteriormente e tentarmos recuperar sua String, teremos como resultado do valor daquele campo, como visto abaixo:
Console.WriteLine(corEscolhida.ToString()); //Azul
Até aqui, nenhum problema em não escrever uma solução para ter uma descrição customizada para o nosso Enum.
O problema é quando temos acentos ou algum caractere diferente e precisamos exportar este valor.
Então, a solução que irei demonstrar é para recuperar sua descrição personalizada para cada item representado dentro do enumerador.
Vou utilizar outro exemplo de enumerador para ficar mais claro. Vamos expor os meses do ano em um Enum e veja como irá ficar:
public enum Meses
{
Janeiro = 1,
Fevereiro = 2,
Marco = 3,
Abril = 4,
Maio = 5,
Junho = 6,
Julho = 7,
Agosto = 8,
Setembro = 9,
Outubro = 10,
Novembro = 11,
Dezembro = 12
}
Note que, o mês de Março será o problema para a saída de nossa descrição, sendo que no código teremos “Marco” e não Março.
Primeiramente, vamos modificar nosso tipo Enum incluindo para cada item um atributo Description() (que está dentro do namespace System.ComponentModel), como no exemplo a seguir:
public enum Meses
{
[Description("Janeiro")]
Janeiro = 1,
[Description("Fevereiro")]
Fevereiro = 2,
[Description("Março")]
Marco = 3,
[Description("Abril")]
Abril = 4,
[Description("Maio")]
Maio = 5,
[Description("Junho")]
Junho = 6,
[Description("Julho")]
Julho = 7,
[Description("Agosto")]
Agosto = 8,
[Description("Setembro")]
Setembro = 9,
[Description("Outubro")]
Outubro = 10,
[Description("Novembro")]
Novembro = 11,
[Description("Dezembro")]
Dezembro = 12
}
O que irá acontecer no código acima é que iremos adicionar o atributo descrição (Description), que poderemos recuperar quando necessário.
Para isto, vamos criar dois métodos que irão fazer este trabalho para nós, sem ter que ficar reescrevendo para cada chamada a mesma rotina:
public static string GetDescription(Enum element)
{
// Recupero a chave do elemento
FieldInfo elementInfo = element.GetType().GetField(element.ToString())!;
// Recuperamos o seu atributo Description
var attributes = (DescriptionAttribute[])elementInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
// Se existe algum atributo
if (attributes.Length > 0)
{
// Verifico se existe alguma descrição, pode haver enumeradores onde não haja descrição
if (attributes[0].Description != null)
return attributes[0].Description;
else
return "Sem descrição"; // Se não há descrição, retorno uma mensagem genérica
}
else
return element.ToString();
}
O método acima consegue buscar a descrição de um determinado elemento de um enumerador (quando houver descrição).
Sendo o método genérico, e pode ser utilizado em qualquer enumerador e reaproveitar o mesmo código para outros pontos do projeto.
Executando o código, teremos o resultado:
Console.WriteLine("Sem a descrição customizada: " + Meses.Marco.ToString());
Console.WriteLine("Com a descrição customizada: " + EnumExtensionHelper.GetDescription(Meses.Marco));
Simples, não? O que pode evoluir este trecho de código é inclui-lo como um método de extensão, acredito que fica bem mais caprichado.
Se quiser baixar este exemplo completo, disponibilizei ele no GitHub do site. É só baixar e estudar. Até a próxima!
Já conhece meus cursos ou material que disponibilizo para o aprendizado da programação? Não?
Entre na página da Reverb Treinamentos no Instagram, acesse os links na bio e conheça hoje mesmo os treinamentos.
Leave a Comment
Your email address will not be published. Required fields are marked with *