2011-10-01 92 views

回答

298

你可以非常簡單地使用LINQ來做到這一點。

確保該使用是在你的C#文件的頂部:

using System.Linq; 

然後使用ToList擴展方法。

例子:

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

需要注意的是,您的解決方案適用於「IEnumerable」的通用版本。下面用戶pickles的答案處理非通用版本。 – mkmurray

+8

感謝您使用System.Linq; – mili

+2

謝謝@mkmurray我需要密切關注找到「pickles」:D – fabriciorissetto

123

如果你與一個普通的舊System.Collections.IEnumerable工作IEnumerable<T>代替你可以使用enumerable.Cast<object>().ToList()

4

我使用的擴展方法這一點。我的擴展方法首先檢查枚舉是否爲空,如果是,則創建一個空列表。這可以讓你對它做一個foreach而不必明確地檢查null。

這裏是一個很做作例如:

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)」函數或List(可枚舉)構造函數會更好。 – QtRoS

14

如果您使用的System.Collections.IEnumerable實現你可以像下面這樣做將其轉換爲List。以下使用Enumerable.Cast方法將IEnumberable轉換爲通用List

//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檢查。