2012-07-27 35 views
10

पर मेरे पास सदस्यों के साथ List<BaseClass> है। मैं सूची (और इसके सभी सदस्यों को विशेष रूप से) List<ChildClass> पर डालना चाहता हूं, जहां ChildClassBaseClass विरासत में है। मुझे पता है कि मैं एक अनुमान के माध्यम से एक ही परिणाम प्राप्त कर सकता हूं:सूची <BaseClass> सूची <ChildClass>

List<ChildClass> ChildClassList = new List<ChildClass>(); 
foreach(var item in BaseClassList) 
{ 
    ChildClassList.Add(item as ChildClass); 
} 

लेकिन क्या ऐसा करने का एक साफ तरीका है? नोट - यह WP7 मंच पर किया जाता है।

उत्तर

18

आप यह कर सकते हैं यदि आप वास्तव में सुनिश्चित करें कि सभी आइटम castable हैं:

ChildClassList = BaseClassList.Cast<ChildClass>().ToList(); 

आपके मौजूदा कोड null कहते हैं एक BaseClass आइटम ChildClass में ढाला नहीं जा सकता है। अगर वह वास्तव में आपका इरादा था, यह बराबर होगा:

ChildClassList = BaseClassList.Select(x => x as ChildClass).ToList(); 

लेकिन मैं नहीं बल्कि किस प्रकार की जाँच भी शामिल है इस सुझाव देंगे, और आइटम है कि मेल नहीं छोड़ देगा:

ChildClassList = BaseClassList.OfType<ChildClass>().ToList(); 
+0

बोत्ज़ के रास्ते का प्रयास करें ... –

+0

धन्यवाद - इस मामले में मुझे यकीन है कि प्रत्येक तत्व निर्दिष्ट प्रकार का है। मैंने अपने मॉडल को "गूंगा" (केवल गुण) और "स्मार्ट" (सभी कार्यक्षमता) संस्करणों में विभाजित किया है, जहां स्मार्ट कक्षाएं गूंगा होती हैं। यहां पहला उदाहरण इस तरह काम करता था - मदद के लिए धन्यवाद! यह आपके लिए भी @ एडम होल्ड्सवर्थ जाता है –

3

निम्नलिखित

var childList = baseList.OfType<ChildClass>().ToList(); 

यह igno देगा: लगभग अपने वर्तमान कोड (केवल लापता बात यह असफल डाले के लिए nulls नहीं जोड़ता है) के बराबर है ऐसे उदाहरण जहां सूची में ChildClass के अलावा अन्य व्युत्पन्न वर्ग शामिल है।

तुम भी उपयोग कर सकते हैं:

var childList = baseList.Cast<ChildClass>().ToList(); 

लेकिन यह बातें यह डाली नहीं कर सकते हैं पर एक InvalidCastException फेंक देते हैं।

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