关于vb.net:C#中的yield break

yield break in c#

本问题已经有最佳答案,请猛点这里访问。

它所做的是否与仅仅返回或让函数完成到最后有所不同?注意:vb.net没有yield break,但要求用迭代器关键字标记函数。


如果您想编写一个迭代器,而该迭代器在源为空或为空时不返回任何值,那么可以讨论C#。下面是一个例子:

1
2
3
4
5
6
7
8
public IEnumerable<T> EnumerateThroughNull<T>(IEnumerable<T> source)
{
    if (source == null)
        yield break;

    foreach (T item in source)
        yield return item;
}

在没有yield break的迭代器中返回空集是不可能的。它还指定迭代器已经结束。您可以将yield break看作是不返回值的返回语句。

1
2
3
4
5
6
7
8
9
int i = 0;
while (true)
{
    if (i < 5)      
        yield return i;
    else            
        yield break; // note that i++ will not be executed after this statement
    i++;
}