前面说过用循环的地方尽量用foreach循环,既简洁又高效。可是删除的时候用foreach会出错,因此我们必须使用for循环来进行操作。
我写了下面一个测试demo,具体界面如下:

第一个图是删除前的,第二个图是删除后的,具体的删除代码如下:
for (int i = 0; i < lsvShow.Items.Count; i++)
{
lsvShow.Items.Remove(lsvShow.Items[i]);
}
经过仔细分析,我发现我们删除的时候lsvShow.Count减小一个,删除了一个吗,但是i的值却一直再循环,所以就会导致lsvShow的item中的index出现变化,因此逐渐减小。
换个方式:如果lshow.item.count是固定值10的话,那么在上面删除时会报异常。因此我们应该删除时把i的值减少1;变成如下代码:
if (lsvShow.Items.Count!=0)
{
for (int i = 0; i < lsvShow.Items.Count; i++)
{
lsvShow.Items.Remove(lsvShow.Items[i]);
i--;
}
}
这样我们就可以清空我们所有的数据了。