Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中链接IEnumerables?_C#_Iterator_Ienumerable - Fatal编程技术网

在C#中链接IEnumerables?

在C#中链接IEnumerables?,c#,iterator,ienumerable,C#,Iterator,Ienumerable,是否有一种简单的内置方法来获取一个有序的IEnumerables列表,并返回一个IEnumerable,该列表按顺序生成第一个、第二个中的所有元素,依此类推 我当然可以写我自己的,但我想知道,在我做这项看似有用的任务之前,是否已经有办法完成它。试试SelectMany IEnumerable<int> Collapse(IEnumerable<IEnumerable<int>> e){ return e.SelectMany(x => x ); }

是否有一种简单的内置方法来获取一个有序的
IEnumerable
s列表,并返回一个
IEnumerable
,该列表按顺序生成第一个、第二个中的所有元素,依此类推

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

试试SelectMany

IEnumerable<int> Collapse(IEnumerable<IEnumerable<int>> e){
 return e.SelectMany(x => x );
}
IEnumerable折叠(IEnumerable e){
返回e.SelectMany(x=>x);
}
此函数的目的是将一组IEnumerable展平为IEnumerable。返回的数据将保留原始顺序

关于JaredPar(正确)的回答,另请参见查询语法:

var all = from inner in outer
          from item in inner
          select item;
除了(正确的)基于LINQ的答案

如果不想使用LINQ,可以使用yield发明ChainedEnumerable类:

public class ChainedEnumerable<T> : IEnumerable<T>
{
    private readonly IEnumerable<T>[] _inners;

    public ChainedEnumerable(params IEnumerable<T>[] inners)
    {
        _inners = inners;
    }

    public IEnumerator<T> GetEnumerator()
    {
        foreach (IEnumerable<T> inner in _inners)
        {
            foreach (T t in inner)
            {
                yield return t;
            }
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}
公共类ChainedEnumerable:IEnumerable
{
私有只读IEnumerable[]\u inners;
public ChainedEnumerable(params IEnumerable[]inners)
{
_inners=inners;
}
公共IEnumerator GetEnumerator()
{
foreach(IEnumerable inner in_inner)
{
foreach(T在内部)
{
收益率t;
}
}
}
IEnumerator IEnumerable.GetEnumerator()
{
返回GetEnumerator();
}
}
像这样使用它:

List<string> a = new List<string> { "A1", "A2", "A3" };
List<string> b = new List<string> { "B1", "B2", "B3" };
ChainedEnumerable<string> chainedEnumerable =
    new ChainedEnumerable<string>(a, b);
foreach (string s in chainedEnumerable)
    Console.WriteLine(s);
List a=新列表{“A1”、“A2”、“A3”};
列表b=新列表{“B1”、“B2”、“B3”};
ChainedEnumerable ChainedEnumerable=
新链式可数(a,b);
foreach(chainedEnumerable中的字符串s)
控制台。写入线(s);

+1这是一个很好且整洁的解决方案。我相信我会把它融入我的东西里!