var ints = new List< int >( new[ ] {
1,
2,
3,
4,
5
} );
var first = true;
foreach( var v in ints ) {
if ( first ) {
for ( long i = 0 ; i < int.MaxValue ; ++i ) { //<-- The thing I iterate
ints.Add( 1 );
ints.RemoveAt( ints.Count - 1 );
}
ints.Add( 6 );
ints.Add( 7 );
}
Console.WriteLine( v );
first = false;
}
यदि आप आंतरिक forलूप की टिप्पणी करते हैं , तो यह फेंकता है, यह स्पष्ट रूप से है क्योंकि हमने संग्रह में परिवर्तन किया था।
अब यदि आप इसे अनसुना करते हैं, तो यह लूप हमें उन दो वस्तुओं को जोड़ने की अनुमति क्यों देता है? इसे आधा मिनट (पेंटियम सीपीयू पर) की तरह चलाने में थोड़ी देर लगती है, लेकिन यह फेंकता नहीं है, और मजेदार बात यह है कि यह है:
यह थोड़ा अपेक्षित था, लेकिन यह इंगित करता है कि हम बदल सकते हैं और यह वास्तव में संग्रह को बदलता है। कोई भी विचार क्यों इस व्यवहार को प्रस्तुत कर रहा है?
int.MaxValueपुनरावृत्तियों को पूरा करने में काफी समय लगता है ...
