如何从值中获取C#Enum描述?

可能重复:
获取Enum值的属性

我有一个像这样的描述属性的枚举:

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

我发现这一点代码来检索基于枚举的描述

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();
}

这使我可以编写如下代码:

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

我想要做的是如果我知道枚举值(例如1) - 如何检索描述? 换句话说,我如何将一个整数转换为一个“枚举值”传递给我的GetDescription方法?


int value = 1;
string description = Enumerations.GetEnumDescription((MyEnum)value);

C#中enum的默认底层数据类型是int ,您可以将其转换为int


我在Unconstrained Melody中以一种通用的,类型安全的方式实现了这一点 - 您可以使用:

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

这个:

  • 确保(具有泛型类型约束)该值确实是一个枚举值
  • 避免目前解决方案中的拳击
  • 缓存所有描述以避免在每次调用时使用反射
  • 有许多其他方法,包括从描述中解析值的能力
  • 我意识到核心答案只是从intMyEnum ,但是如果你正在做很多枚举工作,那么值得考虑使用Unconstrained Melody :)


    我把这些代码放在一个通用的扩展方法中,这样它就可以用于各种对象:

    public static string DescriptionAttr<T>(this T source)
    {
        FieldInfo fi = source.GetType().GetField(source.ToString());
    
        DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(
            typeof(DescriptionAttribute), false);
    
        if (attributes != null && attributes.Length > 0) return attributes[0].Description;
        else return source.ToString();
    }
    

    使用原始文章中的枚举或其属性使用Description属性装饰的任何其他类,可以按如下方式使用代码:

    string enumDesc = MyEnum.HereIsAnother.DescriptionAttr();
    string classDesc = myInstance.SomeProperty.DescriptionAttr();
    
    链接地址: http://www.djcxy.com/p/16275.html

    上一篇: How to get C# Enum description from value?

    下一篇: Getting attributes of Enum's value