Mal eine etwas ausführlichere Begründung, warum man nicht Elemente einer Liste in einer vorwärts-laufenden Schleife löschen kann - bzw. warum es zu
Exception kommt.
Wenn die Schleife gestartet wird, speichert Delphi im ECX-Register die Gesamtzahl der Iterationen für die Schleife. Das ist eine Optimierung um schnell zu sein.
Dieses Register wird mit jedem Durchlauf heruntergezählt und
nicht neu überprüft. Werden jetzt während des Durchlaufes Elemente gelöscht, so will Delphi immer noch alle ursprünglich vorhandenen Elemente durchlaufen...
Index out of Bounds.
Wer unbedingt vorwärts durch die Schleife luafen muss, sollte es mit einer
while Schleife lösen:
Delphi-Quellcode:
var I: Integer;
...
I := 0;
while I < Items.Count-1 do
begin
......
Inc(I);
end;
...
...
...