【问题标题】:How to get enum's Display name from integer如何从整数中获取枚举的显示名称
【发布时间】:2020-11-04 12:36:37
【问题描述】:

我一直在尝试获取 [Display(Name = '')] 内部的值以使用整数输入显示。我已经尝试过 this 帖子所说的操作,但我遇到了错误 - 我认为这是因为我使用的是 .Net Core 而不是框架。这是尝试显示显示名称的代码:

@Enum.GetName(typeof(StateEnum), Timelineinfo.State) //Timelineinfo.State is an int

枚举(因为太长而被截断):

 public enum StateEnum
        {
            Alabama, Alaska, [Display(Name = "American Samoa")] AmericanSamoa, Arizona,
            Arkansas, California, Colorado, Connecticut, Delaware, 
            [Display(Name = "District of Columbia")] DistrictofColumbia, //continues onwards...
       }

【问题讨论】:

标签: c# html asp.net-core razor enums


【解决方案1】:
string GetEnumDisplayName<T>(T value) where T : Enum
{
    var fieldName = Enum.GetName(typeof(T), value);
    var displayAttr = typeof(T)
        .GetField(fieldName)
        .GetCustomAttribute<DisplayAttribute>();
    return displayAttr?.Name ?? fieldName;
}

然后像这样调用它:

var displayName = GetEnumDisplayName(StateEnum.AmericanSamoa);

EDIT如果Timelineinfo.State是一个整数,你可以使用invoke:

var displayName = GetEnumDisplayName((StateEnum)Timelineinfo.State);

【讨论】:

  • 感谢您的回答。这会起作用,除非我不能只说“AmericanSamoa”。 StateEnum 之后发生的事情会根据我所在的页面而改变。但是,我可以通过 @Enum.GetName(typeof(StateEnum), Timelineinfo.State) 得到什么?有没有什么办法可以做到:GetEnumDisplayName(StateEnum.Enum.GetName(typeof(StateEnum), Timelineinfo.State)?
  • @Bubinga 是 Timelineinfo.State 的 StateEnum 值吗?如果是这样,那么您可以致电GetEnumDisplayName(Timelineinfo.State)
  • @Bubinga 我已经编辑了我的答案。请检查一下。
  • 抱歉,Timelineinfo.State 是一个整数。
  • @Bubinga 检查编辑。 GetEnumDisplayName((StateEnum)Timelineinfo.State)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多