我几乎知道它不可能和毫无意义,但只是想学习......我有:
public IEnumerable<IEnumerable<object>> GetMany()
{
while (someCondition)
yield return GetFew();
}
static IEnumerable<object> GetFew()
{
while (someOtherCondition)
yield return new object();
}
我可以将两者结合起来形成一种方法吗?两个不同的迭代器块可以放在一个方法中吗?
编辑:我不是在问如何解决我手边的问题。我正在尝试学习新东西,所以更大的问题是“有两种方法可以在一个函数中使用两个独立的块”吗?我问,因为在C#中有匿名类型和闭包,你可以在没有命名类型或方法的情况下在方法本身内定义新的东西。同样对于块?
答案 0 :(得分:3)
简而言之,不,你不能在同一个方法中嵌套yield
迭代器。
yield
是在方法级别编译的。每次执行yield return
时,它都将退出该方法,然后在中断的位置继续。这意味着如果嵌套yield
语句,它们仍将以方法级别运行,而不是块级别。
答案 1 :(得分:1)
您要求的是匿名迭代器块。 Eric Lippert blogged on the subject一会儿回来。简而言之,他说这将是一个很好的功能,他很乐意看到,但实际实现这样一个功能是非常困难的,所以到目前为止还没有添加到语言中(并且将来添加它是不太可能)。