在使用TStringlist谨慎使用For循环

由于习惯于使用For循环,笔者在开发时遇到奇怪的问题。

在TTabset组件管理大量对象时使用了类似下面的语句

For I:=0 to aTabSet.Tabs.Count-1 do

begin

TObject(aTabSet.Tabs.Objects[I]).Free;

aTabSet.Tabs.Delete(I);

end;

 

乍一看没问题,编译,运行,结果出错啦!

找了半天的原因,在发现,如此操作,Tabs.Count都已经发生了变化,I值已经超出Count的范围,不出错才怪!

后来改用了While循环,终于不出错啦。

研究了一下,如果非要用For循环的话,可以这样写:

For I:=aTabSet.Tabs.Count-1 downto 0 do

begin

TObject(aTabSet.Tabs.Objects[I]).Free;

aTabSet.Tabs.Delete(I);

end;

 

你可能感兴趣的:(String)