C# 从IEnumerable转换为List

C# 从IEnumerable转换为List,c#,list,ienumerable,C#,List,Ienumerable,我想从IEnumerable转换为List。我怎样才能做到这一点?您可以使用LINQ非常简单地做到这一点 确保此使用位于C#文件的顶部: 然后使用扩展方法 例如: IEnumerable<int> enumerable = Enumerable.Range(1, 300); List<int> asList = enumerable.ToList(); IEnumerable enumerable=可枚举范围(1300); List asList=enumerable.

我想从
IEnumerable
转换为
List
。我怎样才能做到这一点?

您可以使用LINQ非常简单地做到这一点

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

然后使用扩展方法

例如:

IEnumerable<int> enumerable = Enumerable.Range(1, 300);
List<int> asList = enumerable.ToList();
IEnumerable enumerable=可枚举范围(1300);
List asList=enumerable.ToList();

如果您使用的是常规的旧
系统.Collections.IEnumerable
而不是
IEnumerable
,您可以使用
enumerable.Cast().ToList()
我为此使用扩展方法。我的扩展方法首先检查枚举是否为null,如果为null,则创建一个空列表。这允许您对其执行foreach操作,而无需显式检查null

下面是一个非常做作的例子:

IEnumerable<string> stringEnumerable = null;
StringBuilder csv = new StringBuilder();
stringEnumerable.ToNonNullList().ForEach(str=> csv.Append(str).Append(","));
IEnumerable stringEnumerable=null;
StringBuilder csv=新的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();
}
公共静态列表ToNonNullList(此IEnumerable对象)
{
return obj==null?new List():obj.ToList();
}
另一种方法

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

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

foreach (var item in enumerable )  
{     
  list.add(item);  
}
List List=新列表();
IEnumerable enumerable=可枚举范围(1300);
foreach(可枚举中的变量项)
{     
列表。添加(项目);
}

如果您使用的是
System.Collections.IEnumerable的实现,您可以执行以下操作将其转换为
列表。下面使用方法将
IEnumberable
转换为通用
列表

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

List<string> provinces = _provinces.Cast<string>().ToList();


因此,如中所述,在将其转换为
列表之前,请记住执行
null
检查

请务必注意,您的解决方案适用于
IEnumerable
的通用版本。下面来自用户pickles的答案处理非通用版本。感谢“使用System.Linq;”谢谢@mkmurray我需要密切关注才能找到“pickles”:我想知道微软是否改变了这一点。我刚刚尝试了这个例子,IEnumerable中没有ToList()方法。使用VS 2015和.NET 4.6.1。@这是一种扩展方法。您可能需要“使用”,但不,他们没有改变这一点。最好使用“AddRange(enumerable)”函数或List(enumerable)构造函数。喜欢它。非常感谢。
//ArrayList Implements IEnumerable interface
ArrayList _provinces = new System.Collections.ArrayList();
_provinces.Add("Western");
_provinces.Add("Eastern");

List<string> provinces = _provinces.Cast<string>().ToList();
IEnumerable<int> values = Enumerable.Range(1, 10);
List<int> valueList = values.ToList();
IEnumerable<int> values2 = null;
List<int> valueList2 = values2.ToList();