我有一个webform,它有两个多选ListBox和一个按钮。该按钮将所选项目从一个ListBox移动到另一个ListBox,同时检查重复项。不幸的是,我在lstEmployees.Items(i).Selected的循环的最后一次迭代中得到了一个超出范围的异常。
我意识到发生了什么,当我删除一个项目(lstEmployees.Items.Remove(li))时,它会更改计数,然后最终抛出错误。有没有办法可以解决这种情况?
If Not lstEmployees.SelectedItem Is Nothing Then
For i As Integer = 0 To lstEmployees.Items.Count - 1
If lstEmployees.Items(i).Selected = True Then
li.Text = lstEmployees.Items(i).Text
li.Value = lstEmployees.Items(i).Value
If Not lstSelected.Items.Contains(li) Then
lstEmployees.Items.Remove(li)
lstSelected.Items.Add(li)
End If
End If
Next
End If
答案 0 :(得分:1)
当您循环遍历项目集合并从该集合中删除项目时,集合中的项目计数会发生变化,并且您退出for循环的检查会失败(当您删除项目时也不会考虑(例如在索引5处) )索引6处的项目滑入第5位并跳过该元素
修复很简单。以相反的顺序循环
If Not lstEmployees.SelectedItem Is Nothing Then
For i As Integer = lstEmployees.Items.Count - 1 To 0 Step -1
....
Next
End If