yield (Référence C#)
Le mot clé yield signale au compilateur que la méthode dans laquelle il s'affiche est un bloc itérateur. Le compilateur génère une classe pour implémenter le comportement exprimé dans le bloc itérateur. Dans le bloc itérateur, le mot clé yield est utilisé avec le mot clé return pour fournir une valeur à l'objet énumérateur. C'est la valeur retournée, par exemple, dans chaque boucle d'une instruction foreach. Le mot clé yield est également utilisé avec break pour signaler la fin d'itération. Pour plus d'informations sur les itérateurs, consultez Itérateurs (Guide de programmation C#). L'exemple suivant affiche les deux formulaires de l'instruction yield.
yield return <expression>;
yield break;
Notes
Dans une instruction yield return, expression est évalué et retourné à l'objet énumérateur sous forme de valeur ; expression doit pouvoir être implicitement convertible vers le type yield de l'itérateur.
Dans une instruction yield break, le contrôle est retourné de manière inconditionnelle à l'appelant de l'itérateur, qui est la méthode IEnumerator.MoveNext (ou son équivalent System.Collections.Generic.IEnumerable<T> générique) ou la méthode Dispose de l'objet énumérateur.
L'instruction yield ne peut apparaître qu'à l'intérieur d'un bloc iterator qui peut être implémenté comme corps d'une méthode, d'un opérateur ou d'un accesseur. Le corps de ces méthodes, opérateurs ou accesseurs est contrôlé par les restrictions suivantes :
Les blocs Unsafe ne sont pas autorisés.
Les paramètres de la méthode, de l'opérateur ou de l'accesseur ne peuvent pas être ref ou out.
Une instruction yield return ne peut pas se trouver à n'importe quel endroit d'un bloc try-catch. Il peut se trouver dans un bloc try si ce dernier est suivi d'un bloc finally.
Une instruction yield break peut se trouver dans un bloc try ou un bloc catch mais pas dans un bloc finally.
Une instruction yield ne peut pas apparaître dans une méthode anonyme. Pour plus d'informations, consultez Méthodes anonymes (Guide de programmation C#).
Lorsqu'elle est utilisée avec expression, une instruction yield return ne peut pas apparaître dans un bloc catch ou dans un bloc try possédant une ou plusieurs clauses catch. Pour plus d'informations, consultez Instructions de gestion des exceptions (Référence C#).
Exemple
Dans l'exemple suivant, l'instruction yield est utilisée à l'intérieur d'un bloc itérateur, ce qui est la méthode Power(int number, int power). Lorsque la méthode Power est appelée, elle retourne un objet énumérable contenant les puissances d'un nombre. Remarquez que le type de retour de la méthode Power est System.Collections.IEnumerable, un type interface itérateur.
public class List
{
//using System.Collections;
public static IEnumerable Power(int number, int exponent)
{
int counter = 0;
int result = 1;
while (counter++ < exponent)
{
result = result * number;
yield return result;
}
}
static void Main()
{
// Display powers of 2 up to the exponent 8:
foreach (int i in Power(2, 8))
{
Console.Write("{0} ", i);
}
}
}
/*
Output:
2 4 8 16 32 64 128 256
*/
Spécification du langage C#
Pour plus d'informations, consultez la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.
Voir aussi
Référence
Utilisation d'itérateurs (Guide de programmation C#)