我正在将一个C#项目转换为VB.net,需要了解C#的Yield Break。我知道有关Stack Overflow上的Yield Break的问题,但我觉得这些问题有点不同。
1。)当您使用Yield Break时,包含它的函数会向调用者返回一个值吗?如果是这样,它是Null / Nothing,函数类型的默认值,还是其他什么?
2。)当你的屈服中断时,迭代器重新开始。换句话说,下次调用Iterator时,它会再次返回集合中的第一个项吗?
3。)与Yield Break最接近的vb.net是什么?退出功能?什么都没回来?还有什么?
答案 0 :(得分:6)
当您使用Yield Break时,包含它的函数会向调用者返回一个值吗?如果是这样,它是Null / Nothing,函数类型的默认值,还是其他什么?
不,它不会返回值。它只是结束枚举。您可以说,它将IEnumerator.MoveNext()
返回值设置为false
,就是这样。
当您使用Yield Break时,Iterator会重新开始。换句话说,下次调用Iterator时,它会再次返回集合中的第一个项吗?
这完全取决于你的方法是如何编写的,但当你调用使用yield
的方法时,你正在创建新的状态机实例,所以它可以再次返回相同的值。
与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
。