C# Collection was modified enumeration operation may not execute Hatası ile karşılaştıysanız ve bu yazımı bulduysanız doğru yere geldiniz demektir.
C# Collection was modified enumeration operation may not execute Hatası
Bu hatanın Türkçe karşılığı : “Koleksiyon değiştirildi; sabit listesi işlemi yürütülemeyebilir“.
Bu hata bir koleksiyonun değiştirilmesine bağlı olarak çıkan bir hatadır. Bu hatanın çıkma sebebi ise bir yerden çektiğiniz koleksiyondan gelen veri başka bir koleksiyon ile örtüşüyordur yada örtüşmüyordur ve sizde bunu almak istemiyorsunuzdur.
Bu amaç ile bir döngü kurmuşsunuzdur ve istemediğiniz itemleri Remove komutu ile silmişsinizdir. Bu temizleme işleminden sonra bir sonucu almak istediğinizde bu hata ile karşılaşırsınız. Burada koleksiyondan bir item sildik ama koleksiyonu güncellemedik. Bu yüzden döngümüz hala listenin ilk halindeki item sayısı kadar döneceğinden bu hatayı alırız.
Bunun sebebi ise koleksiyonların metodlarından olan Count() metodu liste doldurulduğunda çalıştığı için olduğunu düşünüyorum. Koleksiyona ilk defa bir şey yüklediğimizde yüklenen itemlerin sayılarını alıyor ve hafızada tutuyor. Bu bilgiyi güncellemek için de bize ToList() metodunu vermiş olmalılar. En azından ben böyle düşünüyorum.
Örnek olarak şöyle bir döngümüz var diyelim
foreach(var item in dataList){ if(item.Name == "Mustafa") { dataList.Remove(item); } }
bu hata ile karşılaşmamak için kodlarımızı aşağıdaki gibi düzenlemeliyiz.
foreach(var item in dataList.ToList()){ if(item.Name == "Mustafa") { dataList.Remove(item); } }
Yada aşağıdaki gibi kullanabilirsiniz.
for (int i = dataList.Count -1; i >=0; i –){ if(dataList[i] != "Fenerbahçe"){ dataList.Remove(dataList[i]); } }
Bu şekilde kullanarak da bu hatadan kaçınabiliriz.
C# Collection was modified; enumeration operation may not execute Hatası, çözüm dersimizde bu kadar arkadaşlar. Diğer derslerimizde görüşmek üzere…
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Takipte ve Sağlıcakla kalın.