收益率继续?

osc*_*tin 5 c# ienumerable loops yield

OP编辑:这是一个错误的问题,基于对yield return工作原理的误解.简短的回答:如果你不想要yield return什么,什么都不做yield return.


yield return到返回集合中的下一个元素,然后有yield break结束迭代.是否有一种yield continue告诉循环控制器跳到下一个元素?

这是我想要实现的目标,虽然它显然没有构建:

static IEnumerable<int> YieldTest()
{
    yield return 1;
    yield return 2;
    yield continue;
    yield return 4;
}
Run Code Online (Sandbox Code Playgroud)

Ond*_*cny 19

没有必要单独yield continue声明.只需使用continue或任何其他条件语句在枚举算法中跳过元素.

使用的枚举算法yield由编译器在内部转换为状态机,可以多次调用.关键yield是它产生一个输出,有效地暂停/停止状态机在它使用的地方.yield continue就状态机的行为而言,可能的影响根本不是.因此不需要它.

例:

static IEnumerable<int> YieldTest()
{
    for (int value = 1; value <= 4; value++)
    {
        if (value == 3) continue;  // alternatively use if (value != 3) { … }
        yield return value;
    }
}
Run Code Online (Sandbox Code Playgroud)