2

我几乎知道这是不可能和毫无意义的,但只是想学习..我有:

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

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

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

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

4

2 回答 2

3

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

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

于 2013-02-09T21:42:09.857 回答
1

您要的是匿名迭代器块。Eric Lippert不久前就该主题发表了博客。简而言之,他说这将是一个很棒的功能,他很想看到,但是要真正实现这样的功能非常困难,所以到目前为止还没有添加到语言中(将来添加它是不太可能)。

于 2013-02-09T23:07:21.400 回答