J'ai vu cette syntaxe dans MSDN, mais je ne sais pas ce qu'il fait. Personne ne sait?
Réponses
Trop de publicités?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.
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;
}
}