2011-03-31 11 views
10

मैंप्रतिबिंब द्वारा किसी संपत्ति का DisplayAttribute कैसे प्राप्त करें?

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

हालांकि कभी कभी मेरे PropertyNames अच्छी तरह से या तो नामित नहीं कर रहे हैं मुझे PropertyName प्राप्त करने के लिए इस तरह की एक सहायक विधि है (जादू तार से बचने की कोशिश)। इसलिए मैं DisplayAttribute का उपयोग करना चाहता हूं।

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

कृपया ध्यान रखें कि मैं सिल्वरलाइट 4.0 का उपयोग कर रहा हूं। मैं इसके लिए सामान्य नेमस्पेस DisplayAttributeName विशेषता नहीं ढूंढ सका।

इसके बजाय वें eproperty की विशेषता (यदि उपलब्ध हो) पढ़ने के लिए मैं अपनी विधि कैसे बदल सकता हूं?

कई धन्यवाद,

उत्तर

19

यह काम करना चाहिए:

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

बहुत बहुत शुक्रिया! – Houman

+0

आपका स्वागत है गुफा! –

+0

मुझे टाइपिंग सहेजने के लिए धन्यवाद। – TheVillageIdiot

संबंधित मुद्दे