yield (Riferimenti per C#)
Utilizzata in un blocco iteratore per fornire un valore all'oggetto enumeratore o per segnalare la fine dell'iterazione. L'istruzione assume i seguenti formati:
yield return <expression>; yield break;
expression viene valutato e restituito come valore all'oggetto enumeratore. expression deve essere convertibile in modo implicito nel tipo yield dell'iteratore.
L'istruzione yield può essere presente soltanto all'interno di un blocco iterator, che può essere utilizzato come corpo di un metodo, di un operatore o di una funzione di accesso. Il corpo di tali metodi, operatori o funzioni di accesso è controllato dalle seguenti limitazioni:
-
Non sono consentiti i blocchi unsafe.
-
I parametri per il metodo, l'operatore o la funzione di accesso non possono essere ref o out.
Un'istruzione yield non può essere presente in un metodo anonimo. Per ulteriori informazioni, vedere Metodi anonimi (Guida per programmatori C#).
Quando viene utilizzata con expression, un'istruzione yield return non può essere presente in un blocco catch o in un blocco try con una o più clausole catch. Per ulteriori informazioni, vedere Istruzioni di gestione delle eccezioni (Riferimenti per C#).
Nell'esempio riportato di seguito, l'istruzione yield viene utilizzata all'interno di un blocco iteratore, che è il metodo Power(int number, int power). Quando il metodo Power viene richiamato, restituisce un oggetto enumerabile che contiene le potenze di un numero. Si noti che il tipo restituito del metodo Power è IEnumerable, un tipo di interfaccia iteratore.
// yield-example.cs
using System;
using System.Collections;
public class List
{
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
Per ulteriori informazioni, vedere le sezioni riportate di seguito in Specifiche del linguaggio C#:
-
19.3 Iteratori
-
22 Iteratori
Riferimenti
foreach, in (Riferimenti per C#)Utilizzo di iteratori (Guida per programmatori C#)