কম্পিউটার

কেন ত্রুটি সংগ্রহ সংশোধন করা হয়েছে; গণনা অপারেশন কার্যকর নাও হতে পারে এবং কিভাবে এটি C# এ পরিচালনা করবেন?


এই ত্রুটিটি ঘটে যখন একটি লুপিং প্রক্রিয়া একটি সংগ্রহে চলছে (যেমন:তালিকা) এবং রানটাইম চলাকালীন সংগ্রহটি পরিবর্তন করা হয় (ডেটা যোগ করা বা সরানো হয়)৷

উদাহরণ

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.

উপরের উদাহরণে, foreach লুপ StudentList-এ কার্যকর করা হয়। ছাত্রের আইডি 0 হলে, আইটেমটি ছাত্র তালিকা থেকে সরানো হবে। এই পরিবর্তনের কারণে ছাত্র তালিকা সংশোধন করা হয় (আকারের আকার পরিবর্তন করা হয়) এবং রানটাইমের সময় একটি ব্যতিক্রম নিক্ষেপ করা হয়।

উপরের সমস্যাটির সমাধান করুন

উপরের সমস্যাটি কাটিয়ে উঠতে, প্রতিটি পুনরাবৃত্তি শুরুর আগে StudentList-এ একটি 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

  1. "আপনি ঢোকানো ডিস্কটি পাঠযোগ্য ছিল না" ত্রুটিটি কীভাবে ঠিক করবেন

  2. কিভাবে সমাধান করবেন “Mscoree.dll পাওয়া যায়নি” ত্রুটি

  3. কীভাবে 0x0000007F ত্রুটি ঠিক করা এবং প্রতিরোধ করা যায়

  4. Windows 10