2016-07-15 108 views
1

我裝飾了以下枚舉與顯示DataAnnotation屬性:DataAnnotations:讀出的名稱屬性代碼

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

我想讀出的顯示屬性的名稱值在給定的枚舉值我的代碼。我該怎麼做呢?

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

我想你通常會使用反射和GetCustomAttributes()來做到這一點。 –

回答

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; 
    }