Wednesday, 15 February 2012

c# - How to use foreach if iterating collection is changed in this loop? -


मेरे पास संग्रह है:

  सार्वजनिक वर्ग myList: सूची & lt; myClass & gt; {}  

और करें:

  foreach (myLass obj in myList) {// ... if (some_condition) {myList.Add (newObj) ; } // ...}  

इसलिए 2 पुनरावृत्ति से पहले मुझे त्रुटि मिलती है: संग्रह बदल गया था । जाहिर है समस्या myList.Add (newObj) में है;

मैं त्रुटियों से बचने के लिए इस पाश को कैसे व्यवस्थित कर सकता हूँ? ध्यान रखें: मैं कुछ तत्वों को सूची में जोड़ सकते हैं, लेकिन कभी भी नहीं निकाल सकते हैं।

मैं बस Iterator के साथ पाश के लिए का उपयोग कर सकता हूँ लेकिन इस मामले में मेरा कोड थोड़ा बदतर दिखाई देगा। शायद यहाँ कुछ बेहतर समाधान है?

आप संग्रह के दोहराव को मजबूर कर सकते हैं -> एक नया इटरेटर डुप्लिकेट संग्रह पर बनाया जाएगा। संग्रह को डुप्लिकेट करने का सबसे आसान तरीका विस्तार विधि ToArray () है जो सूची से एक सामान्य सरणी बनाता है। यह ऑब्जेक्ट की प्रतिलिपि नहीं करेगा, लेकिन केवल उनके संदर्भ।

  foreach (myClass obj in myList.ToArray ()) {...}  

इसका मतलब है कि किसी भी परिवर्तन से पहले आप हमेशा संग्रह में सभी आइटमों पर लूप रहेंगे! कोई भी जोड़ा नहीं, कोई निकाला नहीं।


No comments:

Post a Comment