Remove Metodu
Şu kod yanlış. Bu kod Java'da ConcurrentModificationException'a sebep oluyor. Üzerinde dolaştığımız listeden bir şey silinemez.
Şöyle yaparız. Sondan başlayıp başa doğru gideriz.
Şöyle yaparız. Silinecek nesneler ayrı bir listede toplanır. Daha sonra silinirler.
Şöyle yaparız. ToList() ile yeni bir liste yaratılır. Bu liste üzerinde dolaşırken, orijinal listeden silme yapılabilir.
Şu kod yanlış. Bu kod Java'da ConcurrentModificationException'a sebep oluyor. Üzerinde dolaştığımız listeden bir şey silinemez.
foreach (Foo x in this.Foos)
{
if (...)
{
this.Foos.Remove(x);
}
}
Çözüm 1Şöyle yaparız. Sondan başlayıp başa doğru gideriz.
for (int i = this.Foos.Count - 1; i >= 0; i--)
{
Foo x = this.Foos[i];
if (...)
{
this.Foos.Remove(x);
}
}
Çözüm 2Şöyle yaparız. Silinecek nesneler ayrı bir listede toplanır. Daha sonra silinirler.
List<Foo> toBeRemoved = this.Foos.OfType<Foo>()
.Where(x => ...).ToList();
toBeRemoved.ForEach(x => { this.Foos.Remove(x); });
Çözüm 3Şöyle yaparız. ToList() ile yeni bir liste yaratılır. Bu liste üzerinde dolaşırken, orijinal listeden silme yapılabilir.
foreach (Foo x in this.Foos.OfType<Foo>().ToList())
{
if (...)
{
this.Foos.Remove(x);
}
}
Hiç yorum yok:
Yorum Gönder