从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(); }