我解决了我的问题,但我需要知道为什么会出现这个问题?
我写了一个项目,将文件加载到listBox然后逐个删除字符串,
但当我删除listBox字符串时,这个异常引发了我的兴趣!
列表索引超出范围(5)!
我输入这个for循环读取列表框并删除字符串:
for i := 0 to ListBox3.Count -1 do
begin
ShowMessage(ListBox3.Items[i]);
ListBox3.items.Delete(i);
end;
Run Code Online (Sandbox Code Playgroud)
并且通过在for循环语句中做一点改变来解决我的问题
for i := ListBox3.Items.Count - 1 downto 0 do
begin
ShowMessage(ListBox3.Items[i]);
ListBox3.items.Delete(i);
end;
Run Code Online (Sandbox Code Playgroud)
为什么第一个语句引发异常,第二个语句工作正常?
通过删除向前移动的项目,您正在切断您站立的分支.:-)循环的上限仅在循环开始之前计算一次,如果删除项目,则列表中的项目现在比计算边界时更少.
List.Count - 1= 5).有效索引是[0..4]通过向后迭代,即使边界仍然只在开始时计算,您将从末尾删除项目并同时减少计数.
downto 0)的终止条件,并且循环安全地退出.