如何在C#中获取枚举的Display属性值?
解决枚举Display特性名称获取问题
你遇到的问题很典型——Enum.GetName的作用本来就是返回枚举成员的原始命名(比如hol),而不是[Display]特性里定义的友好名称。要拿到On Holiday这种显示文本,得通过反射读取枚举成员上的特性值才行。
我推荐写一个通用的扩展方法,这样整个项目里都能复用:
using System.ComponentModel.DataAnnotations; using System.Reflection; public static class EnumExtensions { public static string GetDisplayName(this Enum enumValue) { // 获取枚举成员对应的FieldInfo元数据 var fieldInfo = enumValue.GetType().GetField(enumValue.ToString()); // 读取FieldInfo上标记的DisplayAttribute var displayAttribute = fieldInfo.GetCustomAttribute<DisplayAttribute>(); // 存在特性则返回友好名称,否则回退到枚举原始名称 return displayAttribute?.Name ?? enumValue.ToString(); } }
然后你就可以这样调用,直接拿到想要的友好文本:
string location = ((Locations)record.Friday).GetDisplayName();
补充说明
- 这个方法做了空值兼容:如果某个枚举成员没加
[Display]特性,会默认返回它的原始名称(比如Unspecified即使有特性,哪天你新增无特性的枚举值也不会报错) - 反射逻辑只在首次调用时读取元数据,后续调用性能几乎没有影响,不用担心效率问题
内容的提问来源于stack exchange,提问作者Dppal
相关产品推荐
相关产品推荐

