[c#] ¿Cómo obtener la descripción de C # Enum del valor?


1 Answers

Implementé esto de una forma genérica y segura en Uncontrained Melody . Utilizarías:

string description = Enums.GetDescription((MyEnum)value);

Esta:

  • Asegura (con restricciones de tipo genérico) que el valor realmente es un valor enum
  • Evita el boxeo en tu solución actual
  • Guarda en caché todas las descripciones para evitar el uso de la reflexión en cada llamada
  • Tiene muchos otros métodos, incluida la capacidad de analizar el valor de la descripción

Me doy cuenta de que la respuesta principal fue solo el elenco de un int a MyEnum , pero si estás haciendo un montón de trabajo enum, vale la pena pensar en utilizar Unconstrained Melody :)

Question

Posible duplicado:
Obtener atributos del valor de Enum

Tengo una enumeración con atributos de descripción como esta:

public enum MyEnum
{
    Name1 = 1,
    [Description("Here is another")]
    HereIsAnother = 2,
    [Description("Last one")]
    LastOne = 3
}

Encontré este fragmento de código para recuperar la descripción basada en un 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();
}

Esto me permite escribir código como:

var myEnumDescriptions = from MyEnum n in Enum.GetValues(typeof(MyEnum))
                         select new { ID = (int)n, Name = Enumerations.GetEnumDescription(n) };

Lo que quiero hacer es saber el valor enum (por ejemplo, 1), ¿cómo puedo recuperar la descripción? En otras palabras, ¿cómo puedo convertir un número entero en un "valor Enum" para pasar a mi método GetDescription?




Para hacer esto más fácil de usar, escribí una extensión genérica:

public static string ToDescription<TEnum>(this TEnum EnumValue) where TEnum : struct
{
    return Enumerations.GetEnumDescription((Enum)(object)((TEnum)EnumValue));
}

ahora puedo escribir:

        MyEnum my = MyEnum.HereIsAnother;
        string description = my.ToDescription();
        System.Diagnostics.Debug.Print(description);

Nota: reemplace "Enumeraciones" arriba con su nombre de clase




Related



Tags

c# c#   enums