কম্পিউটার টিউটোরিয়াল

C#-তে "Collection was modified; enumeration operation may not execute" এরর কেন হয় এবং কীভাবে হ্যান্ডেল করবেন?

এই এররটি তখন ঘটে যখন একটি কালেকশন (যেমন: List) এর ওপর একটি লুপিং প্রসেস চলছে থাকে এবং রানটাইমে সেই কালেকশন মডিফাই হয় (ডেটা অ্যাড বা রিমুভ করা হয়)।

উদাহরণ (এরর জনিত কোড)

using System;
using System.Collections.Generic;

namespace DemoApplication
{
    public class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var studentsList = new List
                {
                    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.

উপরের উদাহরণে, `foreach` লুপ `studentsList`-এ এক্সিকিউট হচ্ছে। যখন স্টুডেন্টের Id ০, আইটেমটি `studentsList`- থেকে রিমুভ হয়। এই পরিবর্তনের কারণে `studentsList` মডিফাইড হয়েছে (রিসাইজড) এবং রানটাইমে এক্সসেপশন থ্রো হয়েছে।

সমাধান

উপরের সমস্যা সমাধানের জন্য, প্রতিটি ইটারেশনের শুরুতে `studentsList`-এ `ToList()` অপারেশন পারফর্ম করুন।

foreach (var student in studentsList.ToList())

সolved উদাহরণ

using System;
using System.Collections.Generic;
using System.Linq;

namespace DemoApplication
{
    public class Program
    {
        static void Main(string[] args)
        {
            var studentsList = new List
            {
                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
  1. Mac-এ 'The Disk You Inserted Was Not Readable' এরর ফিক্স করুন: ধাপে ধাপে গাইড

  2. উইন্ডোজে 'Mscoree.dll Could Not Be Found' এরর সমাধান – ধাপে ধাপে গাইড

  3. 0x0000007F ব্লু স্ক্রিন ক্র্যাশ সমাধান ও প্রতিরোধ: Windows-এ

  4. উইন্ডোজ ১০-এ 'Network Path Was Not Found' এরর সমাধান: ৪টি সহজ ধাপ