c# - 获取枚举值的属性

标签 c# reflection enums .net-attributes

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

using System.ComponentModel; // for DescriptionAttribute

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

我想要的是给定枚举类型,生成枚举字符串值的二元组及其描述。

值(value)很简单:

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

但是我如何获取描述属性的值,以填充 Tuple.Desc?如果属性属于 enum 本身,我可以想到如何做到这一点,但我不知道如何从 enum 的值中获取它。

最佳答案

这应该可以满足您的需求。

try
{
  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;
}
catch
{
    return FunkyAttributesEnum.NameWithoutSpaces1.ToString()
}

关于c# - 获取枚举值的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1799370/

相关文章:

Java 如何将泛型参数声明为任意接口(interface)

java - 调用 Class.class.getClass() 时到底发生了什么?

data-structures - 用于在 Go 中存储已解析日志行的紧凑数据结构(即 Go 中多个枚举的紧凑数据结构)

c# - 为什么 HasRequired 不起作用?

c# - 使用 Json.Net 仅序列化简单类型

c# - xsd.exe 属性顺序

c# - 如何缩小文本 block 中的字体大小以适应内容的宽度并保持字体纵横比

c# - 基于 c# 中的用户输入解析为原始类型

c# - 如何为特定值设置内部枚举?

java - 使用反射重置枚举单例字段