Yield Break是否会返回一个值?

Pro*_*oob 4 c# vb.net yield break

我正在将一个C#项目转换为VB.net,需要了解C#的Yield Break.我知道已经有关于Stack Overflow上的Yield Break的问题,但我觉得这些问题有点不同.

1.)当您使用Yield Break时,包含它的函数会向调用者返回一个值吗?如果是这样,它是Null/Nothing,函数类型的默认值,还是其他什么?

2.)当您产生Break时,迭代器重新开始.换句话说,下次调用Iterator时,它会再次返回集合中的第一个项吗?

3.)与Yield Break最接近的vb.net是什么?退出功能?什么都没回来?还有什么?

Mar*_*zek 6

  1. 当您使用Yield Break时,包含它的函数会向调用者返回一个值吗?如果是这样,它是Null/Nothing,函数类型的默认值,还是其他什么?

    不,它不会返回值.它只是结束枚举.你可以说,它设置了IEnumerator.MoveNext()返回值false,就是这样.

  2. 当您使用Yield Break时,Iterator会重新开始.换句话说,下次调用Iterator时,它会再次返回集合中的第一个项吗?

    这一切都取决于你的方法是如何编写的,但是当你调用使用yield你正在创建新状态机实例的方法时,它可以再次返回相同的值.

  3. 与Yield Break相当的最接近的vb.net是什么?退出功能?什么都没回来?还有什么?

    您可以使用Exit Function或Return语句结束迭代.

    来自Yield Statement(Visual Basic)


Tim*_*lds 5

yield break;没有产生一个项目的一部分IEnumerable<T>返回值。

例如,以下为您提供了一个空的枚举:

IEnumerable<int> F()
{
     yield break;
}
Run Code Online (Sandbox Code Playgroud)

这意味着F().Count()为 0。