web-dev-qa-db-ja.com

IEnumerableからListへの変換

IEnumerable<Contact>からList<Contact>に変換したいです。これどうやってするの?

230
kartal

これはLINQを使って非常に簡単に実行できます。

これがC#ファイルの先頭にあることを確認してください。

using System.Linq;

それから ToList 拡張メソッドを使います。

例:

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

System.Collections.IEnumerableの代わりに普通の古いIEnumerable<T>を使っているのなら、enumerable.Cast<object>().ToList()を使うことができます。

157
cordialgerm

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がnullの場合、それをListに変換しようとすると、ValueをnullにすることはできませんとArgumentNullExceptionになります。

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

enter image description here

したがって、 他の答え で説明されているように、それをnullに変換する前に必ずListチェックを実行してください。

18
Nipuna

これには拡張メソッドを使います。私の拡張メソッドは最初に列挙がnullかどうかを確認し、もしそうなら空リストを作成します。これにより、明示的にnullをチェックしなくても、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();
}
5
Craig B

別の方法

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

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

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