Recentemente mi sono imbattuto in questa operazione non valida comune Collection was modified
in C # e, mentre la capisco perfettamente, sembra che sia un problema comune (google, circa 300k risultati!). Ma sembra anche essere una cosa logica e diretta modificare un elenco mentre lo attraversi.
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"));
}
}
Alcune persone creeranno un altro elenco per iterare, ma questo è solo schivare il problema. Qual è la vera soluzione o qual è il vero problema di progettazione qui? Sembra che vogliamo per farlo, ma è indicativo di un difetto di progettazione?