You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取C#枚举中EnumMember特性的字符串值列表?

解决方法

Enum.ToString()只会返回枚举成员的名称,无法自动读取[EnumMember]特性的Value值,你需要通过反射来获取该特性的属性值。

实现步骤

1. 编写扩展方法(推荐,复用性高)

创建一个枚举扩展方法,专门提取EnumMember的Value:

using System.Reflection;
using System.Runtime.Serialization;

public static class EnumExtensions
{
    public static string GetEnumMemberValue(this Enum enumValue)
    {
        // 获取枚举成员的反射信息
        var memberInfo = enumValue.GetType().GetMember(enumValue.ToString()).FirstOrDefault();
        // 提取EnumMember特性
        var enumMemberAttr = memberInfo?.GetCustomAttribute<EnumMemberAttribute>();
        // 返回特性值,无特性则返回枚举名称兜底
        return enumMemberAttr?.Value ?? enumValue.ToString();
    }
}

2. 修改枚举获取代码

用扩展方法替换原有的ToString():

var carList = Enum.GetValues(typeof(CarEnum)).Cast<CarEnum>()
                  .Select(x => x.GetEnumMemberValue())
                  .ToList();

3. 验证结果

执行后carList会返回期望结果:
["Rolls Royce", "Honda", "Mercedes Benz"]

关键说明

  • 必须引用System.Reflection(反射操作依赖)和System.Runtime.Serialization(EnumMemberAttribute所在命名空间)两个命名空间。
  • 兜底逻辑?? enumValue.ToString()确保未标记[EnumMember]的枚举成员不会返回空值,而是返回自身名称。

内容的提问来源于stack exchange,提问作者anhtv13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:27:38