Condividi tramite


yield (Riferimenti per C#)

Aggiornamento: novembre 2007

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;

Note

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 la classe 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 la classe Istruzioni di gestione delle eccezioni (Riferimenti per C#).

Esempio

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.

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 
*/

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere le sezioni riportate di seguito in Specifiche del linguaggio C#:

  • 19.3 Iteratori

  • 22 Iteratori

Vedere anche

Concetti

Guida per programmatori C#

Riferimenti

foreach, in (Riferimenti per C#)

Utilizzo di iteratori (Guida per programmatori C#)

Altre risorse

Riferimenti per C#