关于c#:Yield Break是否返回值?

Does Yield Break return a value?

我正在将一个C项目转换为vb.net,需要了解C的收益率突破。我知道已经有一些关于栈溢出时的收益率中断的问题,但是我觉得这些问题有点不同。

1.)当您生成break时,包含它的函数是否向调用者返回一个值?如果是这样,它是空值还是空值,是函数所在类型的默认值还是其他值?

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

3.)最接近的vb.net等于yield break的是什么?退出功能?什么都不还?还有别的吗?


  • 当您生成break时,包含它的函数是否向调用者返回一个值?如果是这样,它是空值还是空值,是函数所在类型的默认值还是其他值?

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

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

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

  • 最接近的vb.net等于yield break是什么?退出函数?什么都不还?还有别的吗?


    You can use an Exit Function or Return statement to end the iteration.

    from Yield Statement (Visual Basic)


  • yield break;不产生作为IEnumerable返回值一部分的项目。

    例如,下面给出了一个可枚举的空值:

    1
    2
    3
    4
    IEnumerable<int> F()
    {
         yield break;
    }

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


    When you Yield Break does the function that contains it return a value to the caller? If so, is it Null/Nothing, the default value for the type that the function is, or something else?

    不,它阻止了一代人。yield break;不产生任何值。如果您将迭代器看作一个带有回调的循环,那么它就像是循环外的break

    When you Yield Break does the Iterator start over. In other words, the next time the Iterator is called, will it return the first item in the collection again?

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

    What is the closest vb.net equivalent to Yield Break? Exit Function? Return Nothing? Something Else?

    Exit Function