Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
The error message couldn't do a better job in conveying what went wrong. Lets back up...
An index is an integer that identifies the location of an element in a array, list, or other collection type. When accessing items in an array, list or other collection type, you use parenthesis with an index number inside. Array(Index# or Integer Variable).
What is the range?
A range is comprised of two parts:
- Inclusive Lower Bound
- The Lower Bound is the lowest available index number in the collection, and should always be zero. There will not be a zero index in the collection if there are no items in the collection.
- Inclusive Upper Bound
- The Upper Bound is the highest available index number in the collection.
What do you mean by Inclusive?
This means that this number is included in the range.
Example:
- Lets say your lowerbound is zero(it always is)
- Lets say your upperbound is 10
- This means there would be 11 Items total located at the following indexes: 0,1,2,3,4,5,6,7,8,9,10
Why does the 'Index was out of range.' error occur?
Remember, this error message does an excellent job of conveying what went wrong and what to avoid! It tells you:
- The index must be non-negative, which means the lowest possible index number that can exist is zero.
- The index number that you are using must be smaller than the size of the collection.
Example
- If the collection contains a total of 6 elements, since the first index in the collection will be zero, instead of 1, this means that you will never have an index of six(otherwise there would be 7 elements in the collection). Therefore the UpperBound of the collection is calculated like this UpperBound = Collection.Items.Count - 1, or UpperBound = UBound(Array)
That's it, just make sure that you are calculating your indexes correctly.
How to avoid this error:
- Always check what the UpperBound(highest available index) of that particular collection is.
- Only attempt to access that index once you have confirmed that it exists
Example
Option Strict On
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim MyArray As Integer() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim Tmp As Integer
For I = 0 To UBound(MyArray)
'This will not go outside of the bounds of the array
'no error will be caught here
Try
Tmp = MyArray(I)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Next
For I = 0 To MyArray.Count - 1
'This will not go outside of the bounds of the array
'no error will be caught here
Try
Tmp = MyArray(I)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Next
For I = 0 To 9
'This will not go outside of the bounds of the array
'no error will be caught here
Try
Tmp = MyArray(I)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Next
For I = 0 To MyArray.Count - 1
'This will not go outside of the bounds of the array
'no error will be caught here
Try
Tmp = MyArray(I)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Next
For I = 0 To MyArray.Count
'This will go outside of the bounds of the array
'and an error will be caught
Try
Tmp = MyArray(I)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Next
For I = 0 To 10
'This will go outside of the bounds of the array
'and an error will be caught
Try
Tmp = MyArray(I)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Next
End Sub
End Class
References
- ArgumentOutOfRangeException - ArgumentOutOfRangeException Class
- MSDN - MSDN Website
- MSDN Forums