यह त्रुटि तब होती है जब संग्रह पर लूपिंग प्रक्रिया चल रही होती है (उदा:सूची) और संग्रह को रनटाइम के दौरान संशोधित किया जाता है (डेटा जोड़ा या हटाया जाता है)।
उदाहरण
using System; using System.Collections.Generic; namespace DemoApplication { public class Program { static void Main(string[] args) { try { var studentsList = new List<Student> { new Student { Id = 1, Name = "John" }, new Student { Id = 0, Name = "Jack" }, new Student { Id = 2, Name = "Jack" } }; foreach (var student in studentsList) { if (student.Id <= 0) { studentsList.Remove(student); } else { Console.WriteLine($"Id: {student.Id}, Name: {student.Name}"); } } } catch(Exception ex) { Console.WriteLine($"Exception: {ex.Message}"); Console.ReadLine(); } } } public class Student { public int Id { get; set; } public string Name { get; set; } } }
आउटपुट
उपरोक्त कोड का आउटपुट है
Id: 1, Name: John Exception: Collection was modified; enumeration operation may not execute.
उपरोक्त उदाहरण में, छात्रों की सूची पर फ़ोरैच लूप निष्पादित किया गया है। जब छात्र की आईडी 0 होती है, तो छात्र सूची से आइटम हटा दिया जाएगा। इस परिवर्तन के कारण छात्र सूची संशोधित (आकार बदली) हो जाती है और रनटाइम के दौरान एक अपवाद फेंका जा रहा है।
उपरोक्त समस्या को ठीक करें
उपरोक्त समस्या को दूर करने के लिए, प्रत्येक पुनरावृत्ति की शुरुआत से पहले छात्रों की सूची पर एक ToList () ऑपरेशन करें।
foreach (var student in studentsList.ToList())
उदाहरण
using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; namespace DemoApplication { public class Program { static void Main(string[] args) { var studentsList = new List<Student> { new Student { Id = 1, Name = "John" }, new Student { Id = 0, Name = "Jack" }, new Student { Id = 2, Name = "Jack" } }; foreach (var student in studentsList.ToList()) { if (student.Id <= 0) { studentsList.Remove(student); } else { Console.WriteLine($"Id: {student.Id}, Name: {student.Name}"); } } Console.ReadLine(); } } public class Student { public int Id { get; set; } public string Name { get; set; } } }
उपरोक्त कोड का आउटपुट है
आउटपुट
Id: 1, Name: John Id: 2, Name: Jack