A cosa serve l’operatore yield?

Utente HTML.it
chiede

A cosa serve l’operatore yield?

Redazione HTML.it
risponde

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.