LINQ

2012-08-15 17 views
15

का उपयोग करके 'ArrayList' को ' ' (या 'सूची ') में कनवर्ट करें। LINQ का उपयोग करके ArrayList को List<string> में कनवर्ट करना चाहता हूं। मैं ToList() की कोशिश की लेकिन वह दृष्टिकोण काम नहीं कर रहा: LINQ

ArrayList resultsObjects = new ArrayList(); 
List<string> results = resultsObjects.ToList<string>(); 
+0

संभावित डुप्लिकेट (http://stackoverflow.com/ प्रश्न/786,268/में निवल कैसे करते हैं-यू-परिवर्तित-एक-ArrayList-टु-ए-दृढ़ता से टाइप-सामान्य-सूची-withou) –

उत्तर

23

आपका कोड वास्तव में एक List<ArrayList> बजाय एक भी ArrayList को दर्शाता है। क्या तुम सच में सिर्फ एक ArrayList मिला रहे हैं, तो आप शायद चाहते हैं:

ArrayList resultObjects = ...; 
List<string> results = resultObjects.Cast<string>() 
            .ToList(); 

Cast कॉल की आवश्यकता है क्योंकि ArrayList दुर्बलता से टाइप किया है - यह केवल लागू करता IEnumerable, नहीं IEnumerable<T>। LINQ से ऑब्जेक्ट्स में लगभग सभी LINQ ऑपरेटरों IEnumerable<T> पर आधारित हैं।

यह मानते हुए कि ArrayList के भीतर मान वास्तव में तार हैं। यदि वे नहीं हैं, तो आपको हमें प्रत्येक आइटम को स्ट्रिंग में परिवर्तित करने के तरीके के बारे में अधिक जानकारी देना होगा।

2

मुझे लगता है कि आपकी पहली पंक्ति ArrayList resultsObjects = new ArrayList(); होने का मतलब था।

ArrayList अंदर वस्तुओं एक विशेष प्रकार के हैं, तो आप Cast<Type> विस्तार विधि का उपयोग कर सकते हैं:

List<string> results = resultsObjects.Cast<string>().ToList(); 

ArrayList में मनमाने ढंग से वस्तुओं जो आप करना चाहते हैं, तो तार को कनवर्ट करते हैं, आप कर सकते हैं इस का उपयोग करें:

List<string> results = resultsObjects.Cast<object>().Select(x => x.ToString()) 
                .ToList(); 
0

आप ArrayList.ToArray() metho का उपयोग कर object[] सरणी ArrayList तत्वों में बदल सकते हैं घ।

List<ArrayList> resultsObjects = new List<ArrayList>(); 
resultsObjects.Add(new ArrayList() { 10, "BB", 20 }); 
resultsObjects.Add(new ArrayList() { "PP", "QQ" }); 

var list = (from arList in resultsObjects 
         from sr in arList.ToArray() 
         where sr is string 
         select sr.ToString()).ToList(); 
0

तुम भी, LINQ के OfType <> विधि का उपयोग कर सकते हैं आप एक अपवाद को बढ़ाने के लिए चाहते हैं, तो अपने ArrayList की एक वस्तु के इच्छित प्रकार के castable नहीं है पर निर्भर करता है। यदि आपकी सरणी सूची में ऐसी वस्तुएं हैं जो स्ट्रिंग नहीं हैं, तो OfType() उन्हें अनदेखा कर देगा।

var oldSchoolArrayList = new ArrayList() { "Me", "You", 1.37m }; 
var strings = oldSchoolArrayList.OfType<string>().ToList(); 
foreach (var s in strings) 
    Console.WriteLine(s); 

आउटपुट: [? नेट में, कैसे आप एक ArrayList एक जोरदार टाइप किया सामान्य सूची में एक foreach का उपयोग किए बिना परिवर्तित]

Me 
You 
की
संबंधित मुद्दे