por Luciano Carvalho
em 5 de abril de 2010, às 23:27
O enum é uma excelente estrutura para mapear valores sem a necessidade de uma tabela no banco de dados. A grande vantagem é tornar o código muito mais claro, principalmente nas regras de negócio. Um enum consiste de conjuntos de um nome e de um valor inteiro, podendo o tipo "de baixo" ser byte, small ou int de acordo com a sua necessidade.
Veja um exemplo abaixo:
public enum CodUFIbge : byte
{
/// <summary>Acre</summary>
[Description("Acre")]
AC = 12,
/// <summary>Alagoas</summary>
[Description("Alagoas")]
AL = 27,
...
/// <summary>Distrito Federal</summary>
[Description("Distrito Federal")]
DF = 53,
/// <summary>Espírito Santo</summary>
[Description("Espírito Santo")]
ES = 32,
...
/// <summary>São Paulo</summary>
[Description("São Paulo")]
SP = 35,
/// <summary>Tocantins</summary>
[Description("Tocantins")]
TO = 17
}
Note a adição do comentário com a tag <summary> que permite ao Visual Studio mostrar a ajuda no intellisense e note as instâncias da classe DescriptionAttribute do namespace System.ComponentModel. Assim, dentro do programa poderemos atribuir valores como:
CodUFIbge uf = CodUFIbge.DF;
ou
if (uf == CodUFIbge.SP) aliquotaIcms = 0.07;
Para levar mais adiante, pode-se acessar programaticamente o atributo de descrição associado ao enum. Veja o seguinte código:
System.Reflection.MemberInfo[] mia = null;
System.ComponentModel.DescriptionAttribute[] atribs = null;
foreach (Enum teste in Enum.GetValues(typeof(CrucialComBr.ProvedorDados.CodUFIbge)))
{
mia = teste.GetType().GetMember(teste.ToString());
atribs = (mia != null && mia.Length > 0) ? (System.ComponentModel.DescriptionAttribute[])
mia[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false) : null;
Console.WriteLine(atribs != null && atribs.Length == 1 ?
atribs[0].Description : teste.ToString());
}