如何投射IEnumerable <ienumerable <t>&gt;列出<list <t>&gt;

时间:2016-01-08 11:57:56

标签: c# list ienumerable

是否可以投射IEnumerable<IEnumerable<T>> to List<List<T>>?如果我这样做,我将收到无效的强制转换异常。

由于

3 个答案:

答案 0 :(得分:9)

从集合到列表的简单转换使用ToList()方法。样本:

var list = collection.ToList();

您可以使用Linq获取此结构中的所有列表,例如:

首先导入命名空间以使用Linq。

using System.Linq;

试试这个:

var list = collection.Select(c => c.ToList()) // convert each collection in a list
                     .Tolist(); //last ToList to get all conversions in a single list

list对象将为List<List<T>>类型。

答案 1 :(得分:2)

您无法强制转换,必须使用ToList()IEnumerable<T>转换为List<T>

IEnumerable<IEnumerable<T>> input;
var result = input
    .Select(i => i.ToList())
    .ToList();

答案 2 :(得分:0)

Resharper给出了一个很好的建议:

var castedList = (myEnum is List<List<T>>) ? 
    (List<List<T>>) myEnum : 
    myEnum.Select(x => (x is List<T>) ? x as List<T>: x.ToList())

如果枚举已经是列表,这将删除对ToList的过时调用。