यह ठीक काम करता है (के रूप में उम्मीद का मतलब है) में सी # 5.0:कब्जा कर लिया क्लोजर (लूप चर) सी # 5.0 में
var actions = new List<Action>();
foreach (var i in Enumerable.Range(0, 10))
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();
प्रिंटों 9. 0 लेकिन यह एक 10 10 के लिए बार दिखाता है:
var actions = new List<Action>();
for (var i = 0; i < 10; i++)
{
actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();
प्रश्न: यह एक समस्या थी जिसे हमने 5.0 से पहले सी # संस्करणों में किया था; तो हमें बंद करने के लिए एक लूप-स्थानीय प्लेसहोल्डर का उपयोग करना पड़ा और यह अब तय है - सी # 5.0 में - "foreach" loops में। लेकिन "के लिए" loops में नहीं!
इसके पीछे तर्क क्या है (for
लूप भी समस्या को ठीक नहीं कर रहा है)?
क्या आपका मतलब है "इसके लिए क्या कारण है कि 'लूप' के लिए भी तय नहीं किया जा रहा है? –
मुझे आश्चर्य है कि यह पहले मामले में भी काम करता है ... चूंकि आप फोरच/के दायरे से बाहर निकलने के बाद कार्रवाई चलाते हैं। 'Var i' अब मौजूद नहीं होना चाहिए। मेरे लिए, यह एक बहुत ही "खतरनाक" डिजाइन है। – LightStriker
@ लाइटस्ट्राइकर: नहीं; यह एक विशेषता है। इसे बंद करना कहा जाता है। – SLaks