2014-04-10 4 views
5

열거 형의 "표시 이름"데이터 주석에 액세스하는 방법을 아는 사람 있습니까? Entity Framework 데이터 주석 열거 형의 "표시 이름"

나는 표시 이름

class enum SomethingType { 
    [Display(Name = "Type 1")] 
    Type1, 
    [Display(Name = "Type 2")] 
    Type2 
} 

와 열거 형과 참조가

class ModelClass { 
    public SomethingType Type {get; set;} 
} 

가 어떻게 ModelClass의 값에 대한 표시 이름을 표시 않는 모델 클래스가?

감사합니다.

답변

6

난 당신이 이런 식으로 뭔가를 찾고 생각을 이러한 속성에서.

public static string GetAttributeValue<T>(this Enum e, Func<T, object> selector) where T : Attribute 
    { 

     var output = e.ToString(); 
     var member = e.GetType().GetMember(output).First(); 
     var attributes = member.GetCustomAttributes(typeof(T), false); 

     if (attributes.Length > 0) 
     { 
      var firstAttr = (T)attributes[0]; 
      var str = selector(firstAttr).ToString(); 
      output = string.IsNullOrWhiteSpace(str) ? output : str; 
     } 

     return output; 
    } 

예 :

var x = SomethingType.Type1.GetAttributeValue<DisplayAttribute>(e => e.Name); 

.......

class ModelClass 
{ 
    public SomethingType Type { get; set; } 

    public string TypeName 
    { 
     get { return Type.GetAttributeValue<DisplayAttribute>(attribute => attribute.Name); } 
    } 
} 
+1

나는이를 좋아하지만, 난 여전히 더 나은 답변을 기다리고 –

1

당신은 속성의 속성에 액세스하는 반사를 사용할 수 있습니다

class ModelClass 
{ 
    public SomethingType MyType {get; set;} 

    public string TypeName { 

     get 
     { 
      var enumType = typeof(SomethingType); 
      var field = enumType.GetFields() 
         .First(x => x.Name == Enum.GetName(enumType, MyType)); 

      var attribute = field.GetCustomAttribute<Display>(); 

      return attribute.Name; 
     } 

} 
1

당신은 데이터를 읽어들이는 일반적인 도우미 메서드를 만들 수 있습니다

Type = SomethingType.Type2; 

var memberInfo = Type.GetType().GetMember(Type.ToString()); 

if (memberInfo.Any()) 
{ 
    var attributes = memberInfo.First().GetCustomAttributes(typeof(DisplayAttribute), false); 
    if (attributes.Any()) 
    { 
     var name = ((DisplayAttribute)attributes.First()).Name; // Type 2 
    } 
} 
+1

나는 아무도이 대답을 투표하지 않았다 당황 스럽네요 위로 또는 더 나은 아직 답변으로 받아 들였다. –