Yield Break是否会返回一个值?

时间:2013-11-06 01:36:11

标签: c# vb.net break yield

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

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

2。)当你的屈服中断时,迭代器重新开始。换句话说,下次调用Iterator时,它会再次返回集合中的第一个项吗?

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

3 个答案:

答案 0 :(得分:6)

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

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

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

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

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

      

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

         来自Yield Statement (Visual Basic)

答案 1 :(得分:4)

yield break; 会将商品作为IEnumerable<T>返回值的一部分生成。

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

IEnumerable<int> F()
{
     yield break;
}

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

答案 2 :(得分:2)

  

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

不,它会阻止这一代。 yield break;没有产生任何价值。如果你认为迭代器是一个带回调的循环,那就像break离开循环一样。

  

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

是的,它再次被调用,它产生一个新的迭代器。

  

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

Exit Function