Die yield break
Anweisung bewirkt, dass die Aufzählung gestoppt wird. Tatsächlich yield break
schließt die Aufzählung ohne zusätzliche Einzelteile zurückbringen.
Bedenken Sie, dass es tatsächlich zwei Möglichkeiten gibt, wie eine Iteratormethode die Iteration stoppen kann. In einem Fall könnte die Logik der Methode die Methode natürlich verlassen, nachdem alle Elemente zurückgegeben wurden. Hier ist ein Beispiel:
IEnumerable<uint> FindPrimes(uint startAt, uint maxCount)
{
for (var i = 0UL; i < maxCount; i++)
{
startAt = NextPrime(startAt);
yield return startAt;
}
Debug.WriteLine("All the primes were found.");
}
Im obigen Beispiel stoppt die Iteratormethode natürlich die Ausführung, sobald maxCount
Primzahlen gefunden wurden.
Die yield break
Anweisung ist eine weitere Möglichkeit für den Iterator, die Aufzählung einzustellen. Es ist ein Weg, früh aus der Aufzählung auszubrechen. Hier ist die gleiche Methode wie oben. Dieses Mal ist die Zeit begrenzt, die die Methode ausführen kann.
IEnumerable<uint> FindPrimes(uint startAt, uint maxCount, int maxMinutes)
{
var sw = System.Diagnostics.Stopwatch.StartNew();
for (var i = 0UL; i < maxCount; i++)
{
startAt = NextPrime(startAt);
yield return startAt;
if (sw.Elapsed.TotalMinutes > maxMinutes)
yield break;
}
Debug.WriteLine("All the primes were found.");
}
Beachten Sie den Anruf an yield break
. Tatsächlich wird die Aufzählung vorzeitig beendet.
Beachten Sie auch, dass das yield break
anders funktioniert als nur eine Ebene break
. Beendet im obigen Beispiel yield break
die Methode, ohne den Aufruf von zu tätigen Debug.WriteLine(..)
.