VB.Net ASP.Net Webform 中的多选列表框出错

Getting error on multiselect ListBox in VB.Net ASP.Net Webform

我有一个包含两个多选列表框和一个按钮的网络表单。该按钮将所选项目从一个 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

当您遍历项目集合并从该集合中删除项目时,集合中的项目计数会发生变化,并且退出 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