yield breakİfadesi durağına numaralandırma neden olur. Aslında, yield breakherhangi bir ek öğe iade etmeden numaralandırmayı tamamlar.
Bir yineleyici yönteminin yinelemeyi durdurabilmesinin aslında iki yolu olduğunu düşünün. Bir durumda, yöntemin mantığı tüm öğeleri döndürdükten sonra doğal olarak yöntemden çıkabilir. İşte bir örnek:
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.");
}
Yukarıdaki örnekte, yineleyiciler yöntemi, maxCountprimerler bulunduğunda doğal olarak yürütülmeyi durduracaktır .
yield breakDeyim yineleyici numaralandırma durdurma için başka bir yoludur. Bu numaralandırmadan erken kurtulmanın bir yoludur. İşte yukarıdaki ile aynı yöntem. Bu kez, yöntemin yürütülebileceği süre için bir sınırı vardır.
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.");
}
Çağrıya dikkat edin yield break. Aslında, numaralandırmadan erken çıkılıyor.
Dikkat edin, yield breaksadece bir ovadan farklı çalışır break. Yukarıdaki örnekte, yield breakçağrıyı yapmadan yöntemden çıkar Debug.WriteLine(..).