有没有一种方法可以将两个独立的迭代器块组合为一个

本文关键字:独立 迭代器 一个 两个 组合 一种 方法 有没有 | 更新日期: 2023-09-27 17:58:34

我几乎知道这是不可能的,也没有意义,但我只是在努力学习。。我有:

public IEnumerable<IEnumerable<object>> GetMany()
{
    while (someCondition)
        yield return GetFew();
}
static IEnumerable<object> GetFew()
{
    while (someOtherCondition)
        yield return new object();
}

我能把两者结合起来形成一种方法吗?两个不同的迭代器块可以位于一个方法中吗?

编辑:我不是在问如何解决手头的问题。我正在尝试学习一些新的东西,所以更大的问题是"有一种方法可以让两个单独的块在一个函数中工作"?我之所以这么问,是因为C#中有匿名类型和闭包,你可以在方法本身中定义一些新的东西,而不需要命名类型或方法。方块也是如此?

有没有一种方法可以将两个独立的迭代器块组合为一个

简而言之,不,不能在同一方法中嵌套yield迭代器。

CCD_ 2是在方法级别上编译的。每次执行yield return时,它都会退出该方法,然后继续它停止的地方。这意味着,如果嵌套yield语句,它们仍将在方法级别而不是块级别运行。

您想要的是匿名迭代器块。埃里克·利珀特不久前在博客上发表了关于这个话题的文章。简言之,他说这将是一个他很想看到的精彩功能,但要真正实现这样一个功能非常困难,所以到目前为止还没有将其添加到语言中(将来也不太可能添加)。