अगर मैं उपयोग करता हूं:
var strings = new List<string> { "sample" };
foreach (string s in strings)
{
Console.WriteLine(s);
strings.Add(s + "!");
}
Add
में foreach
एक InvalidOperationException फेंकता (संग्रह संशोधित किया गया था; गणन किए गए कार्य पूरे नहीं हो सकता है), जो मैं तार्किक विचार करते हैं, के बाद से हम अपने पैरों के नीचे से गलीचा खींच रहे हैं।
हालांकि, अगर मैं उपयोग करता हूं:
var strings = new List<string> { "sample" };
strings.ForEach(s =>
{
Console.WriteLine(s);
strings.Add(s + "!");
});
जब तक यह एक OutOfMemoryException फेंकता नहीं है, यह तुरंत पैर में खुद को गोली मारता है।
यह मेरे लिए एक आश्चर्य के रूप में आता है, जैसा कि मैंने हमेशा सोचा था कि List.ForEach या तो सिर्फ एक आवरण था या foreach
उसके लिए for
।
क्या किसी के पास इस व्यवहार के कैसे और क्यों के लिए स्पष्टीकरण है?
( सामान्य सूची के लिए ForEach लूप द्वारा अंत में दोहराया गया )