DataAnnotations:在代码中读出Name属性

时间:2016-07-15 20:45:38

标签: c# data-annotations

我使用Display DataAnnotation属性修饰了以下枚举:

public enum RequiredOptions
{
    [Display(Name="Optional",Description ="Optional")]
    Optional,
    [Display(Name="Not Used",Description ="Not Used")]
    NotUsed,
    [Display(Name="Required",Description ="Required")]
    Required
}

我想在我的代码中读出给定枚举值的Display属性的Name值。我该怎么做?

    public static string DisplayRequiredOptionName(RequiredOptions opt)
    {
        // Return the value of Name from the display attribute from opt
    }

1 个答案:

答案 0 :(得分:0)

好吧,在对MVC源代码进行一些挖掘之后(参见src \ System.Web.Mvc \ Html \ SelectExtensions.cs,参见GetDisplayName()),这就是我的工作:

    public static string GetEnumDisplayName<T>(T enumInstance)
    {
        return GetDisplayName(enumInstance.GetType().GetField(enumInstance.ToString()));
    }

    private static string GetDisplayName(FieldInfo field)
    {
        DisplayAttribute display = field.GetCustomAttribute<DisplayAttribute>(inherit: false);
        if (display != null)
        {
            string name = display.GetName();
            if (!String.IsNullOrEmpty(name))
            {
                return name;
            }
        }

        return field.Name;
    }