Deine For-Schleife schaut nur ein einziges mal, bis wohin sie zählen soll. In z.B. C++ ist das anders, da kannst du eine Bedingung angeben.
Hier ein Minimalbeispiel, schau dir doch im Debugger mal an, wie myList immer kleiner wird, dein Index immer größer und dann kracht es:
Delphi-Quellcode:
procedure TForm19.FormCreate(Sender: TObject);
var
myList: TList<Integer>;
myListIndex: Integer;
begin
myList := TList<Integer>.Create();
myList.AddRange([1,2,3,4,5,6,7,8,9,10]);
for myListIndex := 0 to Pred(myList.Count) do
if (myListIndex mod 2 = 0) then
myList.Delete(myListIndex);
end;
PS: Was du genau da genau machst habe ich aber nach mehreren Anläufen immer noch nicht verstanden. Variablennamen wie a und i sind zwar schnell getippt, aber ich komme ehrlich gesagt immer noch ganz hinterher. Willst du aus einer Liste schlichtweg alle Dinge entfernen, auf welche eine bestimmte Eigenschaft zutrifft?