Freigeben über


yield (C#-Referenz)

Aktualisiert: November 2007

Wird in einem Iterator-Block verwendet, um für das Enumerationsobjekt einen Wert zu liefern oder um das Ende der Iteration zu signalisieren. Es nimmt eine der folgenden Formen an:

yield return <expression>;
yield break;

Hinweise

Der Ausdruck wird ausgewertet und als ein Wert an das Enumerationsobjekt zurückgegeben. Der expression muss implizit in den yield-Typ des Iterators konvertierbar sein.

Die yield-Anweisung kann nur innerhalb eines iterator-Blocks stehen, der als Rumpf einer Methode, eines Operators oder eines Accessors verwendet wird. Der Rumpf solcher Methoden, Operatoren oder Accessoren unterliegt folgenden Einschränkungen:

  • Unsichere Blöcke werden nicht zugelassen.

  • Parameter für die Methode, den Operator oder den Accessor dürfen nicht ref oder out sein.

Eine yield-Anweisung darf nicht in einer anonymen Methode stehen. Weitere Informationen hierzu finden Sie unter Anonyme Methoden (C#-Programmierhandbuch).

Bei Verwendung mit expression darf eine yield return-Anweisung nicht in einem catch-Block oder einem try-Block stehen, der mehr als eine catch-Klausel enthält. Weitere Informationen hierzu finden Sie unter Ausnahmebehandlungsanweisungen (C#-Referenz).

Beispiel

Das folgende Beispiel verwendet die yield-Anweisung innerhalb eines Iteratorblocks, nämlich der Power(int number, int power)-Methode. Wird die Power-Methode aufgerufen, gibt sie ein aufzählbares Objekt zurück, das die Potenzen einer Zahl enthält. Beachten Sie, dass der Rückgabetyp der Power-Methode IEnumerable, ein Iteratorschnittstellentyp, ist.

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

C#-Programmiersprachenspezifikation

Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 19.3 Iteratoren

  • 22 Iteratoren

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

foreach, in (C#-Referenz)

Verwenden von Iteratoren (C#-Programmierhandbuch)

Weitere Ressourcen

C#-Referenz