उन सभी संपत्तियों को प्राप्त करें जो कुछ विशेषता को चिह्नित करते हैं


80

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

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

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

संपादित करें
यह स्थानीयकृतडिसप्लेनेमनामे है:

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

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


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

जवाबों:


132

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

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

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

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

7
+1; Nit-pick: मैं IEnumerable<PropertyInfo>यहाँ निर्दिष्ट करूँगा :) यदि यह उत्तर देखने वाला व्यक्ति Linq या प्रतिबिंब से परिचित नहीं है।
मेरलिन मॉर्गन-ग्राहम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.