VB.Net "Index was outside the bounds of the array." 尝试递增数组元素时

VB.Net "Index was outside the bounds of the array." when trying to increment Array element

我有一个记录数组,定义如下:

Structure TNumTemp
        Dim BKA As String
        Dim Num As Integer
        Dim Name As String
    End Structure
 Dim Tarray(LOF(2) / Len(LocationRecord) - 1) As TNumTemp

当我尝试使用 Tarray(i).Num = Tarray(i).Num + 1 增加 Tarray(i).Num 时,我得到了标题中提到的错误因为某些原因!这是相关代码:

For i = 1 To LOF(2) / Len(LocationRecord)
            FileGet(2, LocationRecord, i)

            Tarray(i - 1).Name = Trim(LocationRecord.LocationName)
            Tarray(i - 1).Num = 0
            For j = 1 To LOF(3) / Len(TournamentRecord)
                FileGet(3, TournamentRecord, j)
                If Trim(TournamentRecord.LocationName) = Trim(Tarray(i - 1).Name) Then
                    Tarray(i).Num = Tarray(i).Num + 1
                End If
            Next
        Next

根据我的理解,数组的边界是指数组中元素的数量?但是赋值的是数组的一个元素,而是其中一个结构体的一个元素!?

您创建了一个长度为 n-1 的数组

Dim arr(n - 1) As Integer

但是你循环直到 n

arr(n) = 10 ' This will not work because you are above the array length

初始化数组时删除-1。或者循环直到数组结束

For i = 1 To Tarray.Length-1

您声明数组的元素索引为 0 到 (LOF(2) / Len(LocationRecord) - 1)。遍历所有索引值的最常见方法是编码

For i = 0 To LOF(2) / Len(LocationRecord) - 1

但是你编码了

For i = 1 To LOF(2) / Len(LocationRecord)

在大多数情况下,您通过使用 (i-1) 而不是 (i) 作为循环内的数组索引来弥补这一点,但在出现错误的语句中您没有这样做。最后一次循环,i 将是 (LOF(2) / Len(LocationRecord)),它比最后一个数组索引多一个。您需要将问题陈述更改为

Tarray(i - 1).Num = Tarray(i - 1).Num + 1