如何获取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
相关产品推荐
相关产品推荐

