从IEnumerable转换为List

kar*_*tal 249 c# ienumerable list

我想转换IEnumerable<Contact>List<Contact>.我怎样才能做到这一点?

vcs*_*nes 416

您可以使用LINQ非常简单地完成此操作.

确保使用它位于C#文件的顶部:

using System.Linq;
Run Code Online (Sandbox Code Playgroud)

然后使用ToList扩展方法.

例:

IEnumerable<int> enumerable = Enumerable.Range(1, 300);
List<int> asList = enumerable.ToList();
Run Code Online (Sandbox Code Playgroud)

  • 请务必注意,您的解决方案适用于`IEnumerable`的通用版本.以下用户泡菜的答案处理非通用版本. (43认同)
  • 感谢"使用System.Linq;" (12认同)
  • 谢谢@mkmurray我需要密切关注找到"泡菜":D (3认同)
  • 我想知道微软是否改变了这个.我刚刚尝试了这个例子,IEnumerable中没有ToList()方法.使用VS 2015和.NET 4.6.1. (2认同)
  • @James这是一种扩展方法.您可能需要"使用",但不,他们没有改变这一点. (2认同)

cor*_*erm 171

如果你正在使用普通老式System.Collections.IEnumerable而不是IEnumerable<T>你可以使用enumerable.Cast<object>().ToList()


Nip*_*una 19

如果您正在使用某个实现,则System.Collections.IEnumerable可以执行以下操作将其转换为List.以下使用Enumerable.Cast方法转换IEnumberable为Generic List.

//ArrayList Implements IEnumerable interface
ArrayList _provinces = new System.Collections.ArrayList();
_provinces.Add("Western");
_provinces.Add("Eastern");

List<string> provinces = _provinces.Cast<string>().ToList();
Run Code Online (Sandbox Code Playgroud)

如果您使用的是通用版本IEnumerable<T>,则转换很简单.既然两者都是泛型,你可以这样做,

IEnumerable<int> values = Enumerable.Range(1, 10);
List<int> valueList = values.ToList();
Run Code Online (Sandbox Code Playgroud)

但是,如果IEnumerable为null,当您尝试将其转换为a时List,您将会 ArgumentNullException说Value不能为null.

IEnumerable<int> values2 = null;
List<int> valueList2 = values2.ToList();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

因此,如其他答案中所述,请记住null在将其转换为a之前进行检查List.


小智 6

其它的办法

List<int> list=new List<int>();

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

foreach (var item in enumerable )  
{     
  list.add(item);  
}
Run Code Online (Sandbox Code Playgroud)

  • 最好使用“AddRange(enumerable)”函数或 List(enumerable) 构造函数。 (3认同)

小智 5

我为此使用了扩展方法.我的扩展方法首先检查枚举是否为null,如果是,则创建一个空列表.这允许您对其进行foreach而无需显式检查null.

这是一个非常人为的例子:

IEnumerable<string> stringEnumerable = null;
StringBuilder csv = new StringBuilder();
stringEnumerable.ToNonNullList().ForEach(str=> csv.Append(str).Append(","));
Run Code Online (Sandbox Code Playgroud)

这是扩展方法:

public static List<T> ToNonNullList<T>(this IEnumerable<T> obj)
{
    return obj == null ? new List<T>() : obj.ToList();
}
Run Code Online (Sandbox Code Playgroud)