2011-10-01 24 views

cevap

298

Bunu çok basit bir şekilde LINQ kullanarak yapabilirsiniz.

kullanarak bu C# dosyasının en üstünde olduğundan emin olun:

using System.Linq; 

Sonra ToList uzatma yöntemini kullanın.

Örnek: Eğer IEnumerable<T> yerine düzenli bir eski System.Collections.IEnumerable çalışıyoruz

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

Çözümünüzün IEnumerable'ın genel sürümü için çalıştığını unutmamak önemlidir. Aşağıdaki kullanıcı turşu yanıtı, jenerik olmayan sürümü ele alır. – mkmurray

+8

"using System.Linq;" için teşekkürler – mili

+2

Teşekkür ederim @mkmurray "turşu" bulmak için dikkat etmeliyim: D – fabriciorissetto

123

Bundan ben bir uzantısı yöntemi kullanmak enumerable.Cast<object>().ToList()

4

kullanabilirsiniz. Uzantı yöntemim öncelikle numaralandırma işleminin boş olup olmadığını ve eğer boş bir liste oluşturduğunu denetler. Bu, açık bir şekilde null'u kontrol etmek zorunda kalmadan bir foreach yapmanıza izin verir. İşte

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

uzatma yöntemidir: Burada

çok yapmacık örnektir

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

Eğer System.Collections.IEnumerable bir uygulamasını kullanıyorsanız

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

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

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

"AddRange (numaralandırılabilir)" işlevini veya Liste (numaralandırılabilir) yapıcısını kullanmak daha iyi. – QtRoS

14

başka yolu List'a dönüştürmek için aşağıdakileri yapabilirsiniz. Aşağıdaki IEnumberable bir genel List dönüştürmek için Enumerable.Cast yöntemini kullanır.


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

List<string> provinces = _provinces.Cast<string>().ToList(); 
Eğer Jenerik sürümünü IEnumerable<T> kullanıyorsanız

, dönüşüm yalındır. Her iki jenerik olduğundan, aşağıda gibi yapabilirsiniz
IEnumerable<int> values = Enumerable.Range(1, 10); 
List<int> valueList = values.ToList(); 

Ama IEnumerable boş olması durumunda bir List dönüştürmek çalıştığınızda, değer null olamaz diyerek ArgumentNullException alırsınız

. other answer belirtildiği gibi

enter image description here

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

Bu nedenle, List dönüştürmeden önce bir null kontrolü yapmak unutmayın.