2010-03-22 14 views
7

मान लीजिए मैं की तरहकैसे पता लगाया जाए कि संग्रह में विशिष्ट प्रकार का उदाहरण है या नहीं?

Collection<IMyType> coll; 

संग्रह बनाने तब मैं IMyTypem की तरह, T1, T2, T3 के कई implelentations है ...

तो मैं जानता हूँ कि अगर संग्रह coll प्रकार T1 का एक उदाहरण शामिल करना चाहते हैं। तो मैं

public bool ContainType(<T>){...} 

पर एक विधि लिखना चाहता हूं, यहां पर पैरा क्लास प्रकार नहीं होना चाहिए, क्लास इंस्टेंस नहीं। इस तरह के मुद्दे के लिए कोड कैसे लिखें?

+0

क्या आप LINQ ऑब्जेक्ट्स का उपयोग कर सकते हैं? सी # का कौन सा संस्करण आप उपयोग कर रहे हैं? लूपिंग से बचने और लैम्ब्डा का उपयोग करने के लिए – wtaniguchi

उत्तर

9

आप कर सकते हैं:

public bool ContainsType(this IEnumerable collection, Type type) 
{ 
     return collection.Any(i => i.GetType() == type); 
} 

और फिर यह फोन की तरह:

bool hasType = coll.ContainsType(typeof(T1)); 

आप देखने के लिए अगर एक संग्रह एक प्रकार है कि निर्दिष्ट प्रकार के लिए परिवर्तनीय होता है चाहते हैं, आप कर सकते हैं :

bool hasType = coll.OfType<T1>().Any(); 

यह अलग है, हालांकि, अगर कॉल में टी 1 के उप-वर्ग भी शामिल हैं तो यह सच होगा।

+0

+1। –

+0

बहुत बहुत धन्यवाद। – KentZhou

+0

फिर, इस विधि को कैसे कॉल करें? Coll.COntainsType (T1)? यह वीएस में स्वीकार नहीं किया जाता है। मुझे त्रुटि मिली: 'टी 1' एक 'प्रकार' है लेकिन इसका उपयोग 'चर' – KentZhou

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

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