产量继续?
Yield continue?
OP edit: 这是一个糟糕的问题,它基于对 yield return
工作原理的误解。简短的回答:如果你不想 yield return
什么,就不要 yield return
任何。
yield return
到 return 集合中的下一个元素,然后 yield break
结束迭代。是否有一种 yield continue
告诉循环控制器跳到下一个元素?
这是我想要实现的目标,尽管它显然无法构建:
static IEnumerable<int> YieldTest()
{
yield return 1;
yield return 2;
yield continue;
yield return 4;
}
不需要单独的yield continue
声明。只需使用 continue
或任何其他条件语句在枚举算法中根据需要跳过该元素。
使用yield
的枚举算法在内部被编译器转化为状态机,可以多次调用。 yield
的要点是它生成一个输出,有效地在使用它的地方暂停/停止状态机。就状态机的行为而言,可能的 yield continue
的影响将是 none。因此不需要。
示例:
static IEnumerable<int> YieldTest()
{
for (int value = 1; value <= 4; value++)
{
if (value == 3) continue; // alternatively use if (value != 3) { … }
yield return value;
}
}
如果您想将有关数据中的漏洞的信息传递给调用者,请使用 nullable:
static IEnumerable<int?> YieldTest()
{
yield return 1;
yield return 2;
yield return null;
yield return 4;
}
OP edit: 这是一个糟糕的问题,它基于对 yield return
工作原理的误解。简短的回答:如果你不想 yield return
什么,就不要 yield return
任何。
yield return
到 return 集合中的下一个元素,然后 yield break
结束迭代。是否有一种 yield continue
告诉循环控制器跳到下一个元素?
这是我想要实现的目标,尽管它显然无法构建:
static IEnumerable<int> YieldTest()
{
yield return 1;
yield return 2;
yield continue;
yield return 4;
}
不需要单独的yield continue
声明。只需使用 continue
或任何其他条件语句在枚举算法中根据需要跳过该元素。
使用yield
的枚举算法在内部被编译器转化为状态机,可以多次调用。 yield
的要点是它生成一个输出,有效地在使用它的地方暂停/停止状态机。就状态机的行为而言,可能的 yield continue
的影响将是 none。因此不需要。
示例:
static IEnumerable<int> YieldTest()
{
for (int value = 1; value <= 4; value++)
{
if (value == 3) continue; // alternatively use if (value != 3) { … }
yield return value;
}
}
如果您想将有关数据中的漏洞的信息传递给调用者,请使用 nullable:
static IEnumerable<int?> YieldTest()
{
yield return 1;
yield return 2;
yield return null;
yield return 4;
}