我想从IEnumerable<Contact>转换为List<Contact>。我该怎么做呢?
IEnumerable<Contact>
List<Contact>
您可以使用LINQ非常简单地做到这一点。
确保这个using在你的c#文件的顶部:
using System.Linq;
然后使用ToList扩展方法。
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
IEnumerable<T>
enumerable.Cast<object>().ToList()
我使用了一个扩展方法。我的扩展方法首先检查枚举是否为空,如果是,则创建一个空列表。这允许您在不显式检查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); }
如果你正在使用System.Collections.IEnumerable的实现,你可以像下面这样将它转换为List。下面使用可列举的。投方法将IEnumberable转换为泛型List。
List
IEnumberable
//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
ArgumentNullException
IEnumerable<int> values2 = null; List<int> valueList2 = values2.ToList();
因此,正如其他的答案中提到的,记得在将其转换为List之前进行null检查。
null