私は最近Collection was modified
、C#でこの一般的な無効な操作に出くわしましたが、それを完全に理解している間、それはそのような一般的な問題のようです(グーグル、約30万件の結果!)。しかし、リストを確認しながら変更することも論理的で簡単なことのようです。
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"));
}
}
繰り返し処理するために別のリストを作成する人もいますが、これは問題を回避しているだけです。実際の解決策は何ですか、または実際の設計上の問題は何ですか?私たちは皆これをやりたいようですが、それは設計上の欠陥を示していますか?
You consume an iterator from client code by using a For Each…Next (Visual Basic) or foreach (C#) statement
ライン
Iterator
(説明したとおりに動作する)とListIterator
(必要に応じて動作する)があります。これは、コレクションの種類と実装の広い範囲でイテレータの機能を提供するために、これを指すことになりIterator
(あなたはバランスの取れたツリー?ないのでノードを削除した場合、何が起こるかは極めて限定的であるnext()
と、もはやメイクセンス)ListIterator
以下有することに起因する、より強力なものユースケース。