yield break
İfadesi durağına numaralandırma neden olur. Aslında, yield break
herhangi 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, maxCount
primerler bulunduğunda doğal olarak yürütülmeyi durduracaktır .
yield break
Deyim 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 break
sadece bir ovadan farklı çalışır break
. Yukarıdaki örnekte, yield break
çağrıyı yapmadan yöntemden çıkar Debug.WriteLine(..)
.