2011-10-01 7 views

答えて

298

これは、LINQを使用して非常に簡単に行うことができます。

これは、使用していることを確認しますが、あなたのC#ファイルの先頭にある:

using System.Linq; 

その後ToList拡張メソッドを使用します。

例:

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

あなたのソリューションは、ジェネリックバージョンのIEnumerableで動作することに注意することが重要です。下のユーザーのピクルスからの答えは非ジェネリック版を扱います。 – mkmurray

+8

ありがとうございます "using System.Linq;" – mili

+2

ありがとう@mkmurray私は "ピクルス"を見つけるために細心の注意を払う必要があります:D – fabriciorissetto

123

あなたは、私は、このための拡張メソッドを使用しenumerable.Cast<object>().ToList()

4

を使用することができます代わりにIEnumerable<T>System.Collections.IEnumerable定期的に古いで作業している場合。私の拡張メソッドはまず、列挙がヌルかどうかを調べ、空のリストを作成するかどうかを調べます。これにより、明示的にnullをチェックする必要なく、foreachを実行できます。ここで

は非常に不自然な例です:あなたはあなたSystem.Collections.IEnumerableの実装を使用している場合

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

:ここ

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

は、拡張メソッドであります次のようにして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がnullの場合はListに変換しようとしたとき、あなたは値がnullにすることはできませんと言って ArgumentNullExceptionを取得します

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

enter image description here

したがってother answerで述べたように、Listにそれを変換する前にnullチェックを行うことを忘れないでください。

関連する問題