是否有一个简单的内置方法来获取IEnumerable
s 的有序列表并返回一个单元IEnumerable
,它按顺序产生第一个中的所有元素,然后是第二个,依此类推.
我当然可以写自己的,但我想知道在我做之前是否已经有办法完成这个看似有用的任务.
试试SelectMany.
IEnumerableCollapse(IEnumerable > e){ return e.SelectMany(x => x ); }
此函数的目的是将一组IEnumerable
继JaredPar的(正确的)答案 - 还查询语法:
var all = from inner in outer from item in inner select item;
进一步(正确的)基于LINQ的答案......
如果您不想使用LINQ,可以使用yield来创建一个ChainedEnumerable类:
public class ChainedEnumerable: IEnumerable { private readonly IEnumerable [] _inners; public ChainedEnumerable(params IEnumerable [] inners) { _inners = inners; } public IEnumerator GetEnumerator() { foreach (IEnumerable inner in _inners) { foreach (T t in inner) { yield return t; } } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }
像这样使用它:
Lista = new List { "A1", "A2", "A3" }; List b = new List { "B1", "B2", "B3" }; ChainedEnumerable chainedEnumerable = new ChainedEnumerable (a, b); foreach (string s in chainedEnumerable) Console.WriteLine(s);