Son zamanlarda Collection was modifiedC # bu yaygın geçersiz işlem koştu ve ben tam olarak anlamak iken, böyle yaygın bir sorun gibi görünüyor (google, yaklaşık 300k sonuçları!). Ancak, listeyi gözden geçirirken değiştirmek de mantıklı ve anlaşılır bir şey gibi görünüyor.
List<Book> myBooks = new List<Book>();
public void RemoveAllBooks(){
foreach(Book book in myBooks){
RemoveBook(book);
}
}
RemoveBook(Book book){
if(myBooks.Contains(book)){
myBooks.Remove(book);
if(OnBookEvent != null)
OnBookEvent(this, new EventArgs("Removed"));
}
}
Bazı insanlar yinelemek için başka bir liste oluşturacak, ancak bu sadece sorunu atlatıyor. Gerçek çözüm nedir veya burada asıl tasarım sorunu nedir? Hepimiz bunu yapmak istiyor gibiyiz , ama bu bir tasarım kusurunun göstergesi mi?
You consume an iterator from client code by using a For Each…Next (Visual Basic) or foreach (C#) statementHattı kaçırmayın
Iterator(tanımladığınız gibi çalışır) ve ListIterator(istediğiniz gibi çalışır) vardır. Bu, çok çeşitli koleksiyon türleri ve uygulamaları üzerinde yineleyici işlevselliği sağlamak için Iterator, son derece kısıtlayıcı (dengeli bir ağaçtaki bir düğümü silerseniz ne olur? next()Artık mantıklıdır), ListIteratordaha az olması nedeniyle daha güçlü olduğu anlamına gelir. kullanım örnekleri.