C# 有没有办法将两个独立的迭代器块合并为一个?

C# 有没有办法将两个独立的迭代器块合并为一个?,c#,iterator,refactoring,ienumerable,yield-return,C#,Iterator,Refactoring,Ienumerable,Yield Return,我几乎知道这是不可能的,也是毫无意义的,但我只是在努力学习。。我有: public IEnumerable<IEnumerable<object>> GetMany() { while (someCondition) yield return GetFew(); } static IEnumerable<object> GetFew() { while (someOtherCondition) yield re

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

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

static IEnumerable<object> GetFew()
{
    while (someOtherCondition)
        yield return new object();
}
我能把两者结合起来形成一种方法吗?两个不同的迭代器块可以位于一个方法中吗


编辑:我不是在问如何解决我手头的问题。我正在尝试学习一些新的东西,所以更大的问题是,有没有一种方法可以使两个独立的块在一个函数中工作?我这样问是因为在C中有匿名类型和闭包,您可以在方法本身中定义新的内容,而无需命名类型或方法。同样,对于块?

简言之,不,不能在同一方法中嵌套屈服迭代器


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

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


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

您需要的是匿名迭代器块。Eric Lippert不久前。简而言之,他说这将是一个他很想看到的极好的特性,但实际上实现这样一个特性非常困难,因此到目前为止还没有将其添加到语言中,将来也不太可能添加它。

你想要的是匿名迭代器块。Eric Lippert不久前。简言之,他说这将是一个他很想看到的精彩功能,但实际上实现这样一个功能非常困难,因此到目前为止还没有添加到语言中,将来也不太可能添加到语言中。

您能提供更多细节吗?你想做什么?看看你的工会,我真的没事可做。当然我可以住两个街区。我只是想了解一下,我无意中在一个方法中编写了代码,不得不重构为两个方法才能编译。我就是在考虑这个问题。你能提供更多细节吗?你想做什么?看看你的工会,我真的没事可做。当然我可以住两个街区。我只是想了解一下,我无意中在一个方法中编写了代码,不得不重构为两个方法才能编译。这就是我思考的时候。困难不仅在于它是一个非常棘手的特性,而且在现有架构的基础上实现它需要大量的工作。VB以前没有迭代器,只是添加了迭代器块,并且在使用时添加了匿名迭代器。我希望通过改进的Roslyn架构,该功能在假设的未来版本C中会更便宜。您会注意到,在C 5中,我们添加了异步标称方法和异步lambda。困难不仅在于它是一个非常棘手的功能,但是,在现有体系结构之上实现它也需要大量的工作。VB以前没有迭代器,只是添加了迭代器块,并且在使用时添加了匿名迭代器。我希望通过改进的Roslyn体系结构,在假设的C未来版本中,该功能会更便宜。您会注意到,在C 5中,我们添加了异步标称方法和异步lambda。