Pergunta

Eu estou procurando uma biblioteca de código aberto ou exemplos para trabalhar com tipos ENUM em .Net. Além das extensões padrão que as pessoas usam para Enums (TypeParse, etc.), eu preciso de uma maneira de realizar operações como voltar para o valor do atributo descrição para um determinado valor de enumeração ou para retornar um valor de enumeração que tem uma descrição valor do atributo que corresponde a um determinado string.

Por exemplo:

//if extension method
var race = Race.FromDescription("AA") // returns Race.AfricanAmerican
//and
string raceDescription = Race.AfricanAmerican.GetDescription() //returns "AA"
Foi útil?

Solução

Se não houver um já, começar um! Provavelmente, você pode encontrar todos os métodos que você precisa de outras respostas aqui em Stackoverflow - basta enrolá-las em um único projeto. Eis alguns para você começar:

valor Obtendo de enumeração Descrição:

public static string GetDescription(this Enum value)
{
    FieldInfo field = value.GetType().GetField(value.ToString());
    object[] attribs = field.GetCustomAttributes(typeof(DescriptionAttribute), true));
    if(attribs.Length > 0)
    {
        return ((DescriptionAttribute)attribs[0]).Description;
    }
    return string.Empty;
}

Obtendo um valor enum anulável de string:

public static class EnumUtils
{
    public static Nullable<T> Parse<T>(string input) where T : struct
    {
        //since we cant do a generic type constraint
        if (!typeof(T).IsEnum)
        {
            throw new ArgumentException("Generic Type 'T' must be an Enum");
        }
        if (!string.IsNullOrEmpty(input))
        {
            if (Enum.GetNames(typeof(T)).Any(
                  e => e.Trim().ToUpperInvariant() == input.Trim().ToUpperInvariant()))
            {
                return (T)Enum.Parse(typeof(T), input, true);
            }
        }
        return null;
    }
}

Outras dicas

Eu li este post no blog no outro dia sobre o uso de classes em vez de enums:

http: //www.lostechies .com / blogs / jimmy_bogard / Arquivo / 2008/08/12 / enumeração-classes.aspx

Propõe o uso de uma classe abstrata para servir como a base das classes enum. classe base tem coisas como a igualdade, a análise, comparar, etc.

Com ele, você pode ter aulas para seus enums como este (exemplo retirado do artigo):

public class EmployeeType : Enumeration
{
    public static readonly EmployeeType Manager 
        = new EmployeeType(0, "Manager");
    public static readonly EmployeeType Servant 
        = new EmployeeType(1, "Servant");
    public static readonly EmployeeType AssistantToTheRegionalManager 
        = new EmployeeType(2, "Assistant to the Regional Manager");

    private EmployeeType() { }
    private EmployeeType(int value, string displayName) : base(value, displayName) { }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top