我想从IEnumerable<联系人>转换为列表<联系人>。我该怎么做呢?
当前回答
如果你正在使用常规的旧System.Collections.IEnumerable而不是IEnumerable<T>你可以使用enumerable.Cast<object>().ToList()
其他回答
如果你正在使用System.Collections.IEnumerable的实现,你可以像下面这样将其转换为List。下面使用Enumerable。方法将IEnumberable转换为泛型列表。
//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为空,当你试图将它转换为List时,你会得到 ArgumentNullException表示值不能为空。
IEnumerable<int> values2 = null;
List<int> valueList2 = values2.ToList();
因此,正如在另一个答案中提到的,记得在将其转换为List之前进行空检查。
您可以使用LINQ非常简单地做到这一点。
确保这个using在你的c#文件的顶部:
using System.Linq;
然后使用ToList扩展方法。
例子:
IEnumerable<int> enumerable = Enumerable.Range(1, 300);
List<int> asList = enumerable.ToList();
我使用了一个扩展方法。我的扩展方法首先检查枚举是否为空,如果是,则创建一个空列表。这允许您在不显式检查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();
}
如果你正在使用常规的旧System.Collections.IEnumerable而不是IEnumerable<T>你可以使用enumerable.Cast<object>().ToList()
另一种方式
List<int> list=new List<int>();
IEnumerable<int> enumerable =Enumerable.Range(1, 300);
foreach (var item in enumerable )
{
list.Add(item);
}
推荐文章
- Linq-to-Entities Join vs GroupJoin
- 为什么字符串类型的默认值是null而不是空字符串?
- 在list中获取不同值的列表
- 组合框:向项目添加文本和值(无绑定源)
- Android无尽列表
- 如何为ASP.net/C#应用程序配置文件值中的值添加&号
- 从System.Drawing.Bitmap中加载WPF BitmapImage
- 如何找出一个文件存在于c# / .NET?
- 为什么更快地检查字典是否包含键,而不是捕捉异常,以防它不?
- [DataContract]的命名空间
- string. isnullorempty (string) vs. string. isnullowhitespace (string)
- 完全外部连接
- 在foreach循环中编辑字典值
- 如何在xml文档中引用泛型类和方法
- SQL变量保存整数列表