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.