2010-08-26 17 views
6

वाली विशेषता वाले सभी वर्ग खोजें, क्या उस विशेषता को दिए गए मान के आधार पर एक कस्टम विशेषता के साथ टैग की गई कक्षा को खोजना संभव है?किसी विशिष्ट संपत्ति मान वाले

[MyAttr("CODE")] 
public class MyClass() {} 

वहां से मैं हो रही है सभी वर्गों (प्रकार) - -

var c = Assembly.GetExecutingAssembly().GetTypes().Where 
         (
          t => t.IsClass && 
          t.Namespace == (typeof(AbstractParentClass)).Namespace && 
          t.IsSubclassOf(typeof(AbstractParentClass)) 
         ); 

यह सब दिखाई देता है काम करने के लिए

मूल रूप से, मैं वर्गों है कि इस तरह लग रहे है। c में सभी उपयुक्त वर्ग शामिल हैं। अब मुझे कक्षा को c से प्राप्त करने की आवश्यकता है जिसमें विशेषता MyAttr और मूल्य "कोड" है। यह मूल्य माईएटर पर एक संपत्ति के माध्यम से उपलब्ध है जिसे Id कहा जाता है।

var message = from m in c 
        from a in m.GetCustomAttributes(typeof(MyAttr), false) 
        where ((MyAttr)a).Id == "CODE" 
       select m; 

कि चाल नहीं किया -

यह मेरा प्रयास था। तो, वास्तविक सवाल यह है कि यदि यह भी संभव है और यदि ऐसा है तो उपयुक्त वर्ग प्राप्त करने के लिए क्या बदला जाना चाहिए (और इसे तुरंत चालू करें)।

+2

आपका कोड काम करना चाहिए। क्या आप सुनिश्चित हैं कि 'c' में वह प्रकार शामिल है जिसे आप ढूंढ रहे हैं? – SLaks

+1

स्लाक्स सही है, और कोड काम करना चाहिए। मुझे आश्चर्य है कि क्या असेंबली.GetExecutingAssembly() हमेशा आपके द्वारा अपेक्षित असेंबली लौट रहा है? –

+1

'टाइपफॉफ़ (सार तत्व अभिभावक) के साथ' Assembly.GetExecutingAssembly() 'को बदलने का प्रयास करें। – SLaks

उत्तर

3

Assembly.GetExecutingAssembly()typeof(AbstractParentClass).Assembly के साथ बदलें।

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