2011-10-01 14 views
182

में कनवर्ट करना मैं IEnumerable<Contact> से List<Contact> में कनवर्ट करना चाहता हूं। मैं यह कैसे कर सकता हूँ?IENumerable से सूची

उत्तर

298

आप LINQ का उपयोग करके इसे बहुत आसानी से कर सकते हैं।

यकीन है कि का उपयोग कर इस अपने सी # फ़ाइल के शीर्ष पर है:

using System.Linq; 

फिर ToList विस्तार विधि का उपयोग करें।

उदाहरण:

IEnumerable<int> enumerable = Enumerable.Range(1, 300); 
List<int> asList = enumerable.ToList(); 
+34

यह ध्यान रखना महत्वपूर्ण है कि आपका समाधान 'IENumerable' के सामान्य संस्करण के लिए काम करता है। नीचे उपयोगकर्ता अचार से उत्तर गैर-जेनेरिक संस्करण को संभालता है। – mkmurray

+8

"सिस्टम का उपयोग कर .Linq;" – mili

+2

धन्यवाद @ mkmurray मुझे "अचार" खोजने के लिए नज़दीकी ध्यान देना होगा: डी – fabriciorissetto

123

मामले में आप IEnumerable<T> के बजाय एक नियमित रूप से पुराने System.Collections.IEnumerable साथ काम कर रहे हैं जिनका उपयोग आप enumerable.Cast<object>().ToList()

4

मैं इस के लिए एक विस्तार विधि का उपयोग करें। मेरी विस्तार विधि पहले यह देखने के लिए जांचती है कि गणना शून्य है और यदि ऐसा है तो एक खाली सूची बनाता है। यह स्पष्ट रूप से शून्य के लिए जांच किए बिना इसके बारे में एक foreach करने की अनुमति देता है।

IEnumerable<string> stringEnumerable = null; 
StringBuilder csv = new StringBuilder(); 
stringEnumerable.ToNonNullList().ForEach(str=> csv.Append(str).Append(",")); 

यहाँ विस्तार विधि है::

यहाँ एक बहुत ही काल्पनिक उदाहरण है

public static List<T> ToNonNullList<T>(this IEnumerable<T> obj) 
{ 
    return obj == null ? new List<T>() : obj.ToList(); 
} 
4

एक और तरीका

List<int> list=new List<int>(); 

IEnumerable<int> enumerable =Enumerable.Range(1, 300); 

foreach (var item in enumerable) 
{  
    list.add(item); 
} 
+0

"AddRange (enumerable)" फ़ंक्शन या सूची (गणना करने योग्य) कन्स्ट्रक्टर का उपयोग करना काफी बेहतर है। – QtRoS

14

आप System.Collections.IEnumerable के एक कार्यान्वयन उपयोग कर रहे हैं आप इसे List में बदलने के लिए निम्न की तरह कर सकते हैं। को जेनेरिक List में कनवर्ट करने के लिए Enumerable.Cast विधि का उपयोग करता है।

//ArrayList Implements IEnumerable interface 
ArrayList _provinces = new System.Collections.ArrayList(); 
_provinces.Add("Western"); 
_provinces.Add("Eastern"); 

List<string> provinces = _provinces.Cast<string>().ToList(); 

आप जेनेरिक संस्करण IEnumerable<T> उपयोग कर रहे हैं, रूपांतरण सीधे आगे है। चूंकि दोनों जेनरिक हैं, तो आप नीचे दिए क्या कर सकते हैं

IEnumerable<int> values = Enumerable.Range(1, 10); 
List<int> valueList = values.ToList(); 

लेकिन अगर IEnumerable रिक्त है, जब आप इसे एक List में बदलने का प्रयास करने पर आपको ArgumentNullException कह मूल्य खाली नहीं रह सकती मिलेगा।

IEnumerable<int> values2 = null; 
List<int> valueList2 = values2.ToList(); 

enter image description here

इसलिए के रूप में other answer में उल्लेख किया है, यह एक List को परिवर्तित करने से पहले एक null जाँच करने के लिए याद है।

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