सी # उपज कीवर्ड एक ट्यूटोरियल के माध्यम से कार्य करना के दिलचस्प उपयोग (व्यावसायिक ASP.NET MVC बेवकूफ रात का भोजन), मैं कोड के इस स्निपेट में आए yield
, लेकिन मुझे लगता है कि मेरी समझ अभी भी थोड़ा आलसी है। क्या यह करने के लिए लगता है कि वास्तव में साइकिल चलाना जब तक यह बिल्कुल आवश्यक है कर के बिना एक संग्रह में आइटम के माध्यम से साइकिल चालन की अनुमति देता है एक वस्तु बनाने के लिए है।में बेवकूफ डिनर ट्यूटोरियल
यह उदाहरण एक छोटे से मेरे लिए अजीब है, हालांकि है। क्या मुझे लगता है कि यह कर रहा है किसी भी RuleViolation
उदाहरणों के निर्माण में देरी जब तक प्रोग्रामर वास्तव में संग्रह या तो for each
या .ElementAt(2)
की तरह एक LINQ विस्तार विधि का उपयोग कर में किसी विशिष्ट आइटम का अनुरोध करता है।
जब
if
बयानों की सशर्त भागों का मूल्यांकन मिलता है:इसके अलावा, हालांकि, मैं कुछ प्रश्न हैं? जब
GetRuleViolations()
कहा जाता है या जब गणना करने योग्य वास्तव में पुनरावृत्त होता है? दूसरे शब्दों में,Title
null
सेReally Geeky Dinner
मेंGetRuleViolations()
पर कॉल करने के समय और जब मैं वास्तव में इसे पुन: सक्रिय करने का प्रयास करता हूं, तोRuleViolation("Title required", "Title")
बनाया जाएगा या नहीं?क्यों
yield break;
आवश्यक है? यह वास्तव में यहाँ क्या कर रहा है?मान लीजिए कि
Title
शून्य या खाली है करते हैं। अगर मैंGetRuleViolations()
पर कॉल करता हूं तो परिणामस्वरूप दो बार परिणामस्वरूप गणना करने योग्य दो बार,new RuleViolation("Title required", "Title")
कितनी बार कॉल किया जाएगा?
.Net संकलक इस सिंटेक्टिक चीनी को एक अधिक बेस्टर्डीकृत रूप में बदल देता है। नमूना संकलित करें और फिर परावर्तक में आईएल लोड करें। आपको यह समझने के लिए अबाउट होना चाहिए कि वहां क्या हो रहा है। –