yield (C#-Referenz)
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;
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 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 finden Sie unter Ausnahmebehandlungsanweisungen (C#-Referenz).
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.
// 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);
}
}
}
Ausgabe
2 4 8 16 32 64 128 256
Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:
-
19.3 Iteratoren
-
22 Iteratoren
Referenz
foreach, in (C#-Referenz)Verwenden von Iteratoren (C#-Programmierhandbuch)