从IEnumerable转换为List
我想从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>
,则转换非常简单。 既然是generics,你可以像下面这样做,
IEnumerable<int> values = Enumerable.Range(1, 10); List<int> valueList = values.ToList();
但是,如果IEnumerable
为null,当您尝试将其转换为List
,将会得到ArgumentNullException
说明Value不能为null。
IEnumerable<int> values2 = null; List<int> valueList2 = values2.ToList();
因此,正如在其他答案中提到的,请记住在将其转换为List
之前进行null
检查。
其他方式
List<int> list=new List<int>(); IEnumerable<int> enumerable =Enumerable.Range(1, 300); foreach (var item in enumerable ) { list.add(item); }
我用这个扩展方法。 我的扩展方法首先检查枚举是否为空,如果是,则创build一个空列表。 这允许你做一个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(); }