Alright, so you have a TObjectList instance. You want to loop through the items in it and delete some of the objects from the list. You can’t do this:
for I := 0 to ObjectList.Count - 1 do
if TMyClass(ObjectList[I]).ShouldRemove then
ObjectList.Delete(I);
…because once you delete the first object the index counter I will be all wrong and the loop won’t work any more.
So here is my solution:
Again:
for I := 0 to ObjectList.Count - 1 do
if TMyClass(ObjectList[I]).ShouldRemove then
begin
ObjectList.Delete(I);
goto Again;
end;
This is the best solution I’ve found to this so far. If anyone has a neater solution I’d love to see it.
Try this instead:
That looks like a particularly bad use of goto, jumping out of the for loop like that. I assume it works (since you’re using it), but it would give me the willies.