当前位置:  开发笔记 > 编程语言 > 正文

在C#中链接IEnumerables?

如何解决《在C#中链接IEnumerables?》经验,为你挑选了3个好方法。

是否有一个简单的内置方法来获取IEnumerables 的有序列表并返回一个单元IEnumerable,它按顺序产生第一个中的所有元素,然后是第二个,依此类推.

我当然可以写自己的,但我想知道在我做之前是否已经有办法完成这个看似有用的任务.



1> JaredPar..:

试试SelectMany.

IEnumerable Collapse(IEnumerable> e){
 return e.SelectMany(x => x );
}

此函数的目的是将一组IEnumerable >展平为IEnumerable .返回的数据将保留原始订单.



2> Marc Gravell..:

继JaredPar的(正确的)答案 - 还查询语法:

var all = from inner in outer
          from item in inner
          select item;



3> Roger Lipsco..:

进一步(正确的)基于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();
    }
}

像这样使用它:

List a = 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);

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有