运行此代码时,Visual Studio会给出错误:
InvalidOperationException未处理 已修改此枚举器绑定的列表。只有在列表没有更改时才能使用枚举器。
Dim counter As Integer
For Each x In lstWinners.Items
If x = lstWinners.SelectedItem Then
counter += 1
End If
Next
这是一个截图:
http://i.cubeupload.com/lIoWDg.png
编辑:
这可以通过在开头添加此行来修复: 将任何东西变暗为string = lstWinners.Text
但为什么会发生这种错误,为什么要解决这个问题?
答案 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)
但是,您的代码不应该提供该错误,除非有其他正在运行的内容并修改您的列表(一个单独的线程?)