带有If语句错误的每个循环的VB.net

时间:2015-03-20 15:22:19

标签: vb.net

运行此代码时,Visual Studio会给出错误:

InvalidOperationException未处理 已修改此枚举器绑定的列表。只有在列表没有更改时才能使用枚举器。

    Dim counter As Integer
    For Each x In lstWinners.Items
        If x = lstWinners.SelectedItem Then
            counter += 1
        End If
    Next

这是一个截图:

enter image description here http://i.cubeupload.com/lIoWDg.png

编辑:

这可以通过在开头添加此行来修复: 将任何东西变暗为string = lstWinners.Text

但为什么会发生这种错误,为什么要解决这个问题?

3 个答案:

答案 0 :(得分:0)

当你在列表中查找每种类型的"锁定"数组。解决这个问题的一个好方法是复制数组以进行迭代。

只需使用Array.Copy(source,target,target.Length),其源代码为lstWinners.Items,target是您声明的数组。然后为阵列上的每个循环执行操作。类似的东西:

Dim counter As Integer
Dim tempcopy(lstWinners.Items.Count) As String
Array.Copy(lstWinners.Items, tempcopy, tempcopy.Length)
    For Each x In tempcopy
        If x = lstWinners.SelectedItem Then
            counter += 1
        End If
    Next

答案 1 :(得分:0)

也许它将=运算符视为赋值运算符。 请尝试使用此代码:

Dim counter As Integer
For Each x In lstWinners.Items
    If x Is lstWinners.SelectedItem Then
        counter += 1
    End If
Next

明确地比较对象的相等性,因此它消除了任何潜在的歧义。

答案 2 :(得分:0)

假设您的商品是字符串,并且您想要使用相同的文字计算项目,那么您可以使用

Dim counter As Integer
Dim x = lstWinners.SelectedItem.ToString()
counter = lstWinners.Items.Cast(Of String).Count(Function(z) z = x)

但是,您的代码不应该提供该错误,除非有其他正在运行的内容并修改您的列表(一个单独的线程?)