IEnumerable<Contact>
からList<Contact>
に変換したいです。これどうやってするの?
これはLINQを使って非常に簡単に実行できます。
これがC#ファイルの先頭にあることを確認してください。
using System.Linq;
それから ToList
拡張メソッドを使います。
例:
IEnumerable<int> enumerable = Enumerable.Range(1, 300);
List<int> asList = enumerable.ToList();
System.Collections.IEnumerable
の代わりに普通の古いIEnumerable<T>
を使っているのなら、enumerable.Cast<object>().ToList()
を使うことができます。
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();
したがって、 他の答え で説明されているように、それをnull
に変換する前に必ずList
チェックを実行してください。
これには拡張メソッドを使います。私の拡張メソッドは最初に列挙が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();
}
別の方法
List<int> list=new List<int>();
IEnumerable<int> enumerable =Enumerable.Range(1, 300);
foreach (var item in enumerable )
{
list.add(item);
}