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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:27:33