从IEnumerable转换为List

354

我想将 IEnumerable<Contact> 转换为 List<Contact>。如何实现?

5个回答

572

你可以使用 LINQ 非常简单地完成这项任务。

确保在 C# 文件的顶部引入以下代码:

using System.Linq;
然后使用ToList扩展方法。

示例:

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

52
需要注意的是,您的解决方案适用于“IEnumerable”的通用版本。下面用户pickles的答案处理非泛型版本。 - mkmurray
3
我想知道微软是否对此进行了更改。我刚才尝试了这个示例,但在IEnumerable中没有ToList()方法。使用的是VS 2015和.NET 4.6.1。 - James
3
@James,这是一个扩展方法。你可能需要添加 "using",但是并没有更改这个。 - vcsjones
1
如果我的IEnumerable为空,它会抛出错误吗? - Sumit Joshi

223

如果你使用的是普通的 System.Collections.IEnumerable 而不是 IEnumerable<T>,那么可以使用 enumerable.Cast<object>().ToList()


(如果需要翻译成其他语言,请提供更具体的要求。)

26

如果你正在使用 System.Collections.IEnumerable 实现,可以按照以下方式将其转换为 List。以下示例使用 Enumerable.Cast 方法将 IEnumerable 转换为通用的 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 时,你会得到一个 ArgumentNullException,它说“值不能为 null”。

IEnumerable<int> values2 = null;
List<int> valueList2 = values2.ToList();
因此,如在其他答案中提到的,请记得在将其转换为List之前进行null检查。

enter image description here


7

我使用扩展方法来实现这个功能。我的扩展方法首先检查枚举是否为空,如果是,则创建一个空列表。这样可以在不显式检查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();
}

6
另一种方式
List<int> list=new List<int>();

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

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

3
最好使用 "AddRange(enumerable)" 函数或 List(enumerable) 构造函数。 - QtRoS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接