2011-01-31 10 views
26

क्या कोई कस्टम असेंबली वाले असेंबली में सभी प्रकार के लिए एक शानदार तरीका है?कस्टम विशेषता के साथ असेंबली में सभी प्रकार प्राप्त करें

तो अगर मैं एक वर्ग है

[Findable] 
public class MyFindableClass 
{} 

मैं Assembly.GetTypes द्वारा दिया प्रकार का एक संग्रह (...)

मैं इसके साथ क्या कर सकते हैं में यह पता लगाने के लिए सक्षम होने के लिए चाहते हैं एक बड़ा ढेर हैक, लेकिन मुझे यकीन है कि किसी के पास एक अच्छा तरीका है।

+2

मुझे यकीन नहीं है कि आप "बड़ा वाइल हैक" पर विचार कर रहे हैं, लेकिन यदि यह लूप के लिए आसान है, तो यह एक हैक नहीं है; यह एक अच्छा समाधान है। –

+0

संभावित डुप्लिकेट [सी # - कस्टम क्लास विशेषता वाले सभी वर्गों को कैसे गिनती है?] (Http://stackoverflow.com/questions/607178/c-sharp-how-enumerate-all-classes-with-custom-class-attribute) – nawfal

+0

महत्वपूर्ण अनुवांशिक प्रश्न मैं रनटाइम पर कक्षा पर एक विशेषता कैसे पढ़ूं? http://stackoverflow.com/questions/2656189/how-do-i-read-an-attribute-on-a-class-at-runtime –

उत्तर

45

मुझे लगता है कि नहीं होगा आप, विधानसभा में हर प्रकार की गणना विशेषता के लिए जाँच चकमा कर सकते हैं, लेकिन आप LINQ इस्तेमाल कर सकते हैं समझने के लिए क्वेरी आसान बनाने के लिए:

Assembly assembly = ... 
var types = from type in assembly.GetTypes() 
      where Attribute.IsDefined(type, typeof(FindableAttribute)) 
      select type; 

संपादित करें: MemberInfo.GetCustomAttributes से ले जाया गया मार्क ग्रेवेल के सुझाव के आधार पर Attribute.IsDefined

+3

कड़ाई से बोलते हुए, विशेषता। Is परिभाषित (प्रकार, attribType) यहां अधिक कुशल होगा –

+1

@Marc: महान, दिमाग अगर मैं इसे संपादित करता हूं? – Ani

+0

इसके लिए जाओ - निश्चित रूप से। –

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