什么是“产量突破”? 在C#中做?

我在MSDN中看到过这样的语法: yield break ,但我不知道它的作用。 有人知道吗?


它指定迭代器已结束。 您可以将yield break视为不返回值的return语句。

例如,如果您将函数定义为迭代器,则函数的主体可能如下所示:

for (int i = 0; i < 5; i++)
{
    yield return i;
}

Console.Out.WriteLine("You will see me");

请注意,在循环完成所有循环后,最后一行会被执行,您将在控制台应用程序中看到消息。

或者像yield break

int i = 0;
while (true)
{
    if (i < 5)
    {
        yield return i;
    }
    else
    {
        // note that i++ will not be executed after this
        yield break;
    }
    i++;
}

Console.Out.WriteLine("Won't see me");

在这种情况下,最后一条语句从不执行,因为我们提前离开了函数。


结束迭代器块(例如,说IEnumerable中没有更多元素)。


告诉迭代器它已到达最后。

举个例子:

public interface INode
{
    IEnumerable<Node> GetChildren();
}

public class NodeWithTenChildren : INode
{
    private Node[] m_children = new Node[10];

    public IEnumerable<Node> GetChildren()
    {
        for( int n = 0; n < 10; ++n )
        {
            yield return m_children[ n ];
        }
    }
}

public class NodeWithNoChildren : INode
{
    public IEnumerable<Node> GetChildren()
    {
        yield break;
    }
}
链接地址: http://www.djcxy.com/p/169.html

上一篇: What does "yield break;" do in C#?

下一篇: What is the difference between @staticmethod and @classmethod in Python?