<< Click to Display Table of Contents >> Enum - criando EnumHelper |
![]() ![]() ![]() |
Main
using System;
using System.ComponentModel;
namespace ConsoleApplication8
{
public enum Tipo
{
Bug = 1,
Implementacao = 2,
[Description("Documentação")]
Documentacao = 3,
[Description("Outro tipo")]
Outro = 4,
Suporte = 5,
Alteracao = 6
};
class Program
{
static void Main(string[] args)
{
Tipo tipo = Tipo.Bug;
Console.WriteLine(EnumHelper.GetDescricao(tipo)); // "Documentação"
Console.WriteLine(EnumHelper.GetInt(tipo)); // 3
Console.WriteLine(EnumHelper.GetEnum<Tipo>(3)); // Tipo.Documentacao
Console.WriteLine(EnumHelper.GetEnumDaDescricao<Tipo>("Documentação")); // Tipo.Documentacao
Console.ReadLine();
}
}
}
EnumHelper
using System;
using System.ComponentModel;
using System.Reflection;
/// <summary>
/// This class implements helper methods for enumeration
/// </summary>
public class EnumHelper
{
/// <summary>
/// Retorna um enum a partir de seu número equivalente (SeuEmun)3
/// </summary>
public static T GetEnum<T>(Int32 value)
{
return (T)Enum.Parse(typeof(T), value.ToString());
}
/// <summary>
/// Retorna um enum a partir da sua string
/// </summary>
public static T GetEnum<T>(string value)
{
return (T)Enum.Parse(typeof(T), value);
}
/// <summary>
/// Obtem o numero de um enum = (int)Enum.Constante
/// </summary>
public static Int32 GetInt<T>(T enumField)
{
return Convert.ToInt32(enumField);
}
/// <summary>
/// lê a descrição usando reflexion
/// </summary>
public static String GetDescricao(Enum value)
{
FieldInfo fieldInfo = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes =
(DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
return (attributes.Length > 0) ? attributes[0].Description : value.ToString();
}
/// <summary>
/// Retorna o enum a partir da descrição
/// </summary>
public static T GetEnumDaDescricao<T>(string desc)
{
Type enumType = typeof(T);
string[] names = Enum.GetNames(enumType);
foreach (string name in names)
{
if (GetDescricao((Enum)Enum.Parse(enumType, name)).Equals(desc))
{
return (T)Enum.Parse(enumType, name);
}
}
throw new ArgumentException("Não encontrada enum para esta descrição");
}
}