इस yield break
बयान के कारण गणना रूक जाती है। वास्तव में, yield break
किसी भी अतिरिक्त आइटम को वापस किए बिना गणना को पूरा करता है।
विचार करें कि वास्तव में दो तरीके हैं जो एक पुनरावृत्ति विधि को रोकना रोक सकते हैं। एक मामले में, सभी वस्तुओं को वापस करने के बाद विधि का तर्क स्वाभाविक रूप से विधि से बाहर निकल सकता है। यहाँ एक उदाहरण है:
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.");
}
उपरोक्त उदाहरण में, पुनरावृत्तियाँ मिलने के बाद इट्रेटर विधि स्वाभाविक रूप से निष्पादित करना बंद कर देगी maxCount
।
यह yield break
कथन एन्यूमरेट करने के लिए पुनरावृत्ति करने वाले के लिए एक और तरीका है। यह एन्यूमरेशन से जल्दी बाहर निकलने का एक तरीका है। यहाँ ऊपर जैसा ही तरीका है। इस बार, विधि में समय की मात्रा पर एक सीमा है जिसे विधि निष्पादित कर सकती है।
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.");
}
को फोन पर सूचना दें yield break
। वास्तव में, यह गणना को जल्दी से बाहर निकाल रहा है।
यह भी ध्यान दें कि yield break
काम एक सादे से अलग है break
। उपरोक्त उदाहरण में, yield break
कॉल किए बिना विधि से बाहर निकलता है Debug.WriteLine(..)
।