一尘不染

获取枚举值的属性

c#

我想知道是否有可能获取enum值的属性而不是其enum本身?例如,假设我有以下内容enum

using System.ComponentModel; // for DescriptionAttribute

enum FunkyAttributesEnum
{
    [Description("Name With Spaces1")]
    NameWithoutSpaces1,    
    [Description("Name With Spaces2")]
    NameWithoutSpaces2
}

我想要的是枚举类型,产生2个元组的枚举字符串值及其描述。

价值很容易:

Array values = System.Enum.GetValues(typeof(FunkyAttributesEnum));
foreach (int value in values)
    Tuple.Value = Enum.GetName(typeof(FunkyAttributesEnum), value);

但是,如何获取描述属性的值进行填充Tuple.Desc?我可以考虑如果Attribute属于enum自身,那么该怎么做,但是我对如何从的值中获取它感到迷惑enum


阅读 761

收藏
2020-05-19

共1个答案

一尘不染

这应该做您需要的。

var enumType = typeof(FunkyAttributesEnum);
var memberInfos = enumType.GetMember(FunkyAttributesEnum.NameWithoutSpaces1.ToString());
var enumValueMemberInfo = memberInfos.FirstOrDefault(m => m.DeclaringType == enumType);
var valueAttributes = 
      enumValueMemberInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
var description = ((DescriptionAttribute)valueAttributes[0]).Description;
2020-05-19