Lỗi này xảy ra khi một quá trình lặp đang chạy trên một tập hợp (Ví dụ:Danh sách) và tập hợp được sửa đổi (thêm hoặc xóa dữ liệu) trong thời gian chạy.
Ví dụ
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; } } }
Đầu ra
Đầu ra của đoạn mã trên là
Id: 1, Name: John Exception: Collection was modified; enumeration operation may not execute.
Trong ví dụ trên, vòng lặp foreach được thực thi trên studentList. Khi Id của sinh viên bằng 0, mục này sẽ bị xóa khỏi Danh sách sinh viên. Do thay đổi này, Danh sách sinh viên được sửa đổi (thay đổi kích thước) và một ngoại lệ sẽ được đưa ra trong thời gian chạy.
Khắc phục sự cố trên
Để khắc phục sự cố trên, hãy thực hiện thao tác ToList () trên studentList trước khi bắt đầu mỗi lần lặp.
foreach (var student in studentsList.ToList())
Ví dụ
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; } } }
Đầu ra của đoạn mã trên là
Đầu ra
Id: 1, Name: John Id: 2, Name: Jack