2010-07-13 25 views
23

के साथ सभी को ढूंढें क्या एक निश्चित प्रकार के सभी वस्तुओं को एक लिंक/लैम्ब्डा अभिव्यक्ति के साथ सूचीबद्ध करने का कोई तरीका है?लिंक सभी प्रकार के

अद्यतन: उत्तरों के कारण, मुझे एहसास हुआ कि सवाल पर्याप्त विशिष्ट नहीं था। मुझे केवल एक विशिष्ट प्रकार के आइटम के साथ एक नई सूची चाहिए। मेरे मामले में, कक्षा में कोई उप-वर्ग नहीं मिला है, इसलिए विरासत को ध्यान में रखने की आवश्यकता नहीं है।

+0

उपयोग करने का सुझाव आप राज्य कर सके या नहीं, आप विरासत उपेक्षा करना चाहते हैं? जैसे यदि आप सभी ऑब्जेक्ट प्रकार चाहते थे, तो क्या आप ऑब्जेक्ट प्रकार चाहते हैं या ऑब्जेक्ट के सभी उप-वर्गों को शामिल करना चाहते हैं। कुछ जवाब पहले करेंगे, दूसरे दूसरे। –

+0

मैं देखता हूं, मेरे मामले में कक्षा में कोई सबक्लास नहीं है। –

उत्तर

73

इसलिए की तरह उपयोग OfType<T>:

foreach (var bar in MyList.OfType<Foo>()) { 
    ... 
} 
+3

IENumerable एक्सटेंशन विधि का उपयोग करना टाइप टाइप यह करने का माइक्रोसॉफ्ट अनुशंसित तरीका है। – devlife

29

ऐसा करने देगा?

list.Where(t => t is MyType); 
+2

+1 बहुत बेहतर पढ़ता है कि अन्य तरीके – GFoley83

+0

हां, पढ़ने में आसान लग रहा है। +1 –

+5

लेकिन यदि आप ऑफ़ टाइप टाइप का भी उपयोग करते हैं तो आपको अभी भी परिणाम डालना होगा। –

0

हो सकता है आप इस्तेमाल कर सकते हैं ...

 List<object> list = new List<object>(); 
     list.Add("string"); 
     list.Add(9); 

     var allOfOneType = list.Where(i => i.GetType().Equals(typeof(string))); 
+0

हाँ ... डेव मार्कल्स का जवाब बेहतर है - शायद :) – hnkz

1

कुछ इस तरह (वस्तुओं को LINQ का उपयोग करता है, तो - यह संस्थाओं के लिए LINQ के साथ काम नहीं करेगा):

var specificListOfTypes = from item in list 
          where item.GetType() == typeof(int) 
          select item; 
+2

आप GetType() का उपयोग नहीं कर सकते हैं। यह निम्न त्रुटि फेंकता है: "LINQ से इकाइयां विधि को पहचान नहीं पाती हैं। सिस्टम टाइप करें टाइप करें टाइप करें, और इस विधि को स्टोर अभिव्यक्ति में अनुवादित नहीं किया जा सकता है।" – spadelives

+0

ठीक है, तो आप LINQ से Entities में GetType() का उपयोग नहीं कर सकते हैं, लेकिन LINQ से ऑब्जेक्ट्स काम करता है –

-1

आप GetType() विधि का उपयोग कर सकते हैं और निर्दिष्ट प्रकार के साथ तुलना कर सकते हैं।

उदाहरण के लिए, मैं नीचे की सूची से स्ट्रिंग प्रकार के सभी मानों का चयन करें:

var myList = new List<object>(); 

     myList.Add(5); 

     myList.Add("My life"); 

     var result = from obj in myList 
        where obj.GetType() == typeof(string) 
        select obj; 
+1

यह एक त्रुटि फेंकता है, "LINQ से इकाइयां विधि को पहचान नहीं पाती हैं 'सिस्टम। टाइप करें GetType()' विधि, और यह विधि को एक अभिव्यक्ति अभिव्यक्ति में अनुवादित नहीं किया जा सकता है। " – spadelives

-1

मैं इस var myLst = new List<object>(); var elements = myList.Where(item => item.GetType().IsInstanceOfType(typeof(MyClass)));

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