मैं हाल ही Collection was modified
में C # में इस सामान्य अमान्य ऑपरेशन में भाग गया , और जब मैं इसे पूरी तरह से समझता हूं, तो यह एक ऐसी सामान्य समस्या लगती है (Google, लगभग 300k परिणाम!)। लेकिन जब आप इसके माध्यम से जाते हैं तो किसी सूची को संशोधित करना एक तार्किक और सीधी बात लगती है।
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
कम होने के कारण अधिक शक्तिशाली होने के साथ ? बक्सों का इस्तेमाल करें।