2011-09-05 14 views
60

मेरे पास कक्षा और गुण हैं। कुछ गुणों को विशेषता चिह्नित किया जा सकता है (यह DisplayNameAttribute से विरासत है)। इस विधि के लिए वर्ग के सभी गुण प्राप्त है:सभी गुण प्राप्त करें जो कुछ विशेषता चिह्नित करते हैं

private void FillAttribute() 
{ 
    Type type = typeof (NormDoc); 
    PropertyInfo[] propertyInfos = type.GetProperties(); 
    foreach (var propertyInfo in propertyInfos) 
    { 
     ... 
    } 
} 

मैं लिस्टबॉक्स जो लिस्टबॉक्स में विशेषता के LocalizedDisplayName और प्रदर्शन मूल्य में चिह्नित में वर्ग के गुणों जोड़ना चाहते हैं। मैं यह कैसे कर सकता हूँ?

संपादित
यह LocalizedDisplayNameAttribute है:

public class LocalizedDisplayNameAttribute : DisplayNameAttribute 
    { 
     public LocalizedDisplayNameAttribute(string resourceId) 
      : base(GetMessageFromResource(resourceId)) 
     { } 

     private static string GetMessageFromResource(string resourceId) 
     { 
      var test =Thread.CurrentThread.CurrentCulture; 
      ResourceManager manager = new ResourceManager("EArchive.Data.Resources.DataResource", Assembly.GetExecutingAssembly()); 
      return manager.GetString(resourceId); 
     } 
    } 

मैं संसाधन फ़ाइल से स्ट्रिंग प्राप्त करना चाहते हैं। धन्यवाद।

+0

"विशेषता के मान" क्या है? गुण कक्षाएं हैं, और उनमें "मूल्य" (गुण/फ़ील्ड) का * बहुत * हो सकता है। शायद आप 'ToString()' के परिणाम के बारे में बात कर रहे हैं? क्या आप अपने द्वारा लागू किए जा रहे कस्टम विशेषताओं के लिए कुछ कोड जोड़ने के लिए अपना प्रश्न संपादित कर सकते हैं, और निर्दिष्ट कर सकते हैं कि आप कौन से डेटा को बंद करना चाहते हैं? –

+1

संभावित डुप्लिकेट [किसी दिए गए गुण के साथ गुणों की सूची कैसे प्राप्त करें?] (Http://stackoverflow.com/questions/2281972/how-to-get-a-list-of-properties-with-a-given -ट्रिब्यूट) – abatishchev

उत्तर

98

यह शायद IsDefined उपयोग करने के लिए सबसे आसान है:

var properties = type.GetProperties() 
    .Where(prop => prop.IsDefined(typeof(LocalizedDisplayNameAttribute), false)); 

संपादित करें: मान खुद को पाने के लिए, आप उपयोग करेंगे:

var attributes = (LocalizedDisplayNameAttribute[]) 
     prop.GetCustomAttributes(typeof(LocalizedDisplayNameAttribute), false); 
+1

+1; नाइट-पिक: मैं यहां 'आईनेमरेबल ' निर्दिष्ट करता हूं :) मददगार अगर यह उत्तर देखने वाला व्यक्ति लिंक या प्रतिबिंब से परिचित नहीं है। –

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