yield permet de construire un itérateur. Un itérateur permet de parcourir une séquence, et dans le cas présent, la séquence n'est pas construite avant utilisation, mais au fur et à mesure des besoins. Exemple:
using System;
using System.Collections;
public class List
{
// on suppose depart < fin :)
public static IEnumerable NombresPas2(int debut, int fin)
{
for (int i = debut; i < fin; i = i + 2)
{
yield return i;
}
}
static void Main()
{
// Afficher une suite de nombre ave cun pas de 2
foreach (int i in NombresPas2(1, 10))
{
Console.Write("{0} ", i);
}
Console.WriteLine();
}
}
Ce code va afficher 1 3 5 7 9
Les nombres sont construits à la volée, lors de l'exécution de la boucle foreach dans Main. Pour que ça soit possible, le compilateur génère tout un code pour garder le contexte d'exécution deNombresPas2, lorsqu'il rencontre le mot-clé yield, merci à lui :)
yield permet de construire un itérateur. Un itérateur permet de parcourir une séquence, et dans le cas présent, la séquence n'est pas construite avant utilisation, mais au fur et à mesure des besoins. Exemple:
Ce code va afficher 1 3 5 7 9
Les nombres sont construits à la volée, lors de l'exécution de la boucle foreach dans Main. Pour que ça soit possible, le compilateur génère tout un code pour garder le contexte d'exécution deNombresPas2, lorsqu'il rencontre le mot-clé yield, merci à lui :)