yield è un operatore che permette di creare collezioni enumerabili, ovvero che implementano l’interfaccia IEnumerable oppure IEnumerator (generiche o non).
È sufficiente creare un metodo che restituisce un oggetto di tipo IEnumberable oppure IEnumerator e, al suo interno, produrre una sequenza di valori utilizzando l’operatore yield: il compilatore C# si occuperà di generare automaticamente il tipo IEnumberable (o IEnumberator) corrispondente. Ad esempio:
public static IEnumerable<int> Power(int number, int exponent)
{
int counter = 0;
int result = 1;
while (counter++ < exponent)
{
result = result * number;
yield return result;
}
}
static void Main(string[] args)
{
foreach (int i in Power(2, 8))
Console.Write("{0} ", i);
Console.ReadLine();
}
Utilizzando l’operatore yield nel metodo Power, ogni volta che si richiama il metodo MoveNext sull’oggetto IEnumerable<int> restituito da questa routine si ottiene il prossimo valore della collezione: tutto il codice per la gestione dell’iteratore è creato automaticamente dal compilatore.