2011-03-31 21 views
10

Ben Yansıma tarafından bir özellik DisplayAttribute nasıl edinilir?

public static string GetPropertyName<T>(Expression<Func<T>> expression) 
     { 
      var body = (MemberExpression) expression.Body; 
      return body.Member.Name; 
     } 

Ancak bazen propertyNames dolayısıyla iyi adlı değildir (sihirli dizeleri önlemek için çalışıyor) Bana PropertyName almak için böyle bir Yardımcı yöntemine sahip. Bu yüzden DisplayAttribute'u kullanmayı tercih ediyorum.

[Display(Name = "Last Name")] 
public string Lastname {get; set;} 

Lütfen Silverlight 4.0 kullandığımı unutmayın. Bunun için her zamanki ad alanı DisplayAttributeName özniteliğini bulamadım.

Bunun yerine, özniteliğin özniteliğini (varsa) okumak için yöntemimi nasıl değiştirebilirim?

Birçok sayesinde

cevap

19

Bu çalışması gerekir:

public static string GetPropertyName<T>(Expression<Func<T>> expression) 
{ 
    MemberExpression propertyExpression = (MemberExpression)expression.Body; 
    MemberInfo propertyMember = propertyExpression.Member; 

    Object[] displayAttributes = propertyMember.GetCustomAttributes(typeof(DisplayAttribute), true); 
    if(displayAttributes != null && displayAttributes.Length == 1) 
     return ((DisplayAttribute)displayAttributes[0]).Name; 

    return propertyMember.Name; 
} 
+0

Çok teşekkür ederim! – Houman

+0

Rica ederim Kave! –

+0

Yazarak beni kurtardığın için teşekkürler. – TheVillageIdiot

İlgili konular