572 votes

Ce n' "yield break;" faire en C#?

J'ai vu cette syntaxe dans MSDN, mais je ne sais pas ce qu'il fait. Personne ne sait?

607voto

Damir Zekić Points 7517

Il précise qu'un itérateur est venu à une fin. Vous pouvez penser à de la yield break comme return déclaration qui n'a pas de valeur de retour.

Par exemple, si vous définissez une fonction comme itérateur, un corps de la fonction peut ressembler à ceci:

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

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

À noter qu'après la boucle a terminé tous les cycles, la dernière ligne est exécuté et vous verrez le message dans la console de votre application.

Ou comme ça avec 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");

Dans ce cas, la dernière affirmation n'est jamais exécutée parce que nous avons quitté dès le début.

66voto

Brian Points 82719

Se termine un itérateur bloc (par exemple, dit il n'y a pas plus d'éléments dans l'interface IEnumerable).

33voto

Trap Points 4042

Raconte l'itérateur qu'il est arrivé à la fin.

À titre d'exemple:

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;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X