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
Referenz
Verwenden von Iteratoren (C#-Programmierhandbuch)