Hinweis: Das funktioniert schon gut, aber ich versuche zu verstehen, warum es so funktioniert, aber nicht der andere.Code Verwirrung - warum funktioniert man, aber nicht die andere?
ich dynamisch eine WinForm (C#) haben mit Bildern setzen, etwa so:
Nun, wenn Sie die ‚Napred‘ Schaltfläche klicken, sollten diese Bilder gelöscht werden (unter anderem), für die ich ursprünglich verwendet: Jetzt
foreach(Control ctrl in Controls)
if(ctrl is PictureBox) ctrl.Dispose();
oder
for(int i = 0; i < Controls.Count; i++)
if(Controls[i] is PictureBox) Controls[i].Dispose();
, wenn ich dies ausführen, erhalte ich:
Aber wenn ich nur das es for
Aussage ändern zurück zu schicken, es arbeitet?
for(int i = Controls.Count - 1; i >= 0; i--)
if(Controls[i] is PictureBox) Controls[i].Dispose();
(Ich werde ein anderes Bild nicht hochgeladen werden, aber es löscht alle Elemente (Ich werde nur die Tasten am Ende links))
Kann mich jemand aufklären, warum ein arbeitet aber nicht die anderen?
EDIT: Ich verwende VS2015 Community Edition unter Windows 10, wenn ein Debugging-Fehler ist
Wenn Sie ein Array von 10 Stück und dann element1 löschen, wird Element2 neue element1 werden und du wirst 9 Gegenstände übrig haben. Die Standardmethode zur Entsorgung von Array-Elementen besteht darin, sie rückwärts zu durchlaufen. – LightBulb
Könnte für andere Ansätze von Interesse sein: http://stackoverflow.com/questions/7340757/c-sharp-list-removing-items-while-looping-iterating –
Warum verwenden Sie nicht Remove-Methode? –