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)
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)
小智 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)