एक महत्वपूर्ण अंतर .ForEach विधि आप अंतर्निहित संग्रह संशोधित कर सकते हैं के साथ है। फोरैच सिंटैक्स के साथ यदि आप ऐसा करते हैं तो आपको अपवाद मिलेगा। यहां इसका एक उदाहरण दिया गया है (बिल्कुल सही दिखने वाला नहीं बल्कि यह काम करता है):
static void Main(string[] args) {
try {
List<string> stuff = new List<string>();
int newStuff = 0;
for (int i = 0; i < 10; i++)
stuff.Add(".");
Console.WriteLine("Doing ForEach()");
stuff.ForEach(delegate(string s) {
Console.Write(s);
if (++newStuff < 10)
stuff.Add("+"); // This will work fine and you will continue to loop though it.
});
Console.WriteLine();
Console.WriteLine("Doing foreach() { }");
newStuff = 0;
foreach (string s in stuff) {
Console.Write(s);
if (++newStuff < 10)
stuff.Add("*"); // This will cause an exception.
}
Console.WriteLine();
}
catch {
Console.WriteLine();
Console.WriteLine("Error!");
}
Console.ReadLine();
}
स्रोत
2009-12-17 22:10:18
मुझे आज के लिए मेरी "नई चीजें सीखा" मिलीं। धन्यवाद। –
ऐसा इसलिए है क्योंकि कवर के तहत, 'फॉरएच (एक्शन)' लूप के लिए उपयोग करता है। प्रतिबिंब में यह ऐसा लगता है: 'के लिए (int i = 0; i
(दिलचस्प बात यह है कि रिफ्लेक्टर यह भी दिखाता है कि माइक्रोसॉफ्ट में किसी ने "मैच" नामक पैरामीटर वाले 'सूची' विधियों में से एक से नल चेक को काटकर चिपकाया। यदि आप 'एक्शन ' के रूप में शून्य पास करते हैं, तो यह ' आपको बताएगा कि "मैच" पैरामीटर सही "क्रिया" पैरामीटर की बजाय शून्य है।) –