Visual Studio (List.Count - 1) = List.Count
Visual Studio (List.Count - 1) = List.Count
我已经试了一段时间了,我完全不明白为什么我的程序会这样。
我尝试在 google 和此处进行搜索,但也许我无法正确表述我的问题,或者我是唯一遇到此问题的人。
无论如何,这是我的问题:
Protected myList as List(Of CustomClass) = new List(Of CustomClass)
Public Sub mySub()
Dim ListCount as Integer = myList.Count
ListCount = ListCount - 1
For i As Integer = 0 To ListCount Step 1
If myList(i).MyStatus = FMyStatus Then
myList(i).MyFunction.Invoke()
myList.RemoveAt(i)
End If
Next
End Sub
当我大于 myList-index 时,这总是抛出一个异常。
问题是 ListCount 即使我将它减 1 仍然保持不变,它不可能减 1。
但是,如果我将它减少 2,就完全没问题了。
这常见吗?我错过了什么吗?我已经尝试在 msdn 网站上找到 List.Count 属性 的内容,但找不到可以解释为什么我不能将值减 1 的内容。
希望大家多多赐教。
干杯。
您需要向后循环才能完成此操作:
For i As Integer = myList.Count - 1 To 0 Step -1
如果你走另一条路,当你删除一个项目时,列表变小,但你仍然试图去到原始列表的末尾。
我已经试了一段时间了,我完全不明白为什么我的程序会这样。 我尝试在 google 和此处进行搜索,但也许我无法正确表述我的问题,或者我是唯一遇到此问题的人。
无论如何,这是我的问题:
Protected myList as List(Of CustomClass) = new List(Of CustomClass)
Public Sub mySub()
Dim ListCount as Integer = myList.Count
ListCount = ListCount - 1
For i As Integer = 0 To ListCount Step 1
If myList(i).MyStatus = FMyStatus Then
myList(i).MyFunction.Invoke()
myList.RemoveAt(i)
End If
Next
End Sub
当我大于 myList-index 时,这总是抛出一个异常。 问题是 ListCount 即使我将它减 1 仍然保持不变,它不可能减 1。 但是,如果我将它减少 2,就完全没问题了。
这常见吗?我错过了什么吗?我已经尝试在 msdn 网站上找到 List.Count 属性 的内容,但找不到可以解释为什么我不能将值减 1 的内容。
希望大家多多赐教。 干杯。
您需要向后循环才能完成此操作:
For i As Integer = myList.Count - 1 To 0 Step -1
如果你走另一条路,当你删除一个项目时,列表变小,但你仍然试图去到原始列表的末尾。