好的,所以你有一个 TObjectList 实例。您想遍历其中的项目并从列表中删除一些对象。你不能这样做:
for I := 0 to ObjectList.Count - 1 do
if TMyClass(ObjectList[I]).ShouldRemove then
ObjectList.Delete(I);
...因为一旦你删除了第一个对象,索引计数器我就会错了,循环将不再起作用。
所以这是我的解决方案:
Again:
for I := 0 to ObjectList.Count - 1 do
if TMyClass(ObjectList[I]).ShouldRemove then
begin
ObjectList.Delete(I);
goto Again;
end;
这是迄今为止我找到的最好的解决方案。如果有人有更整洁的解决方案,我很乐意看到它。