Original

You are currently reviewing an older revision of this page.
Go to current version


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.

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

I hope you find this helpful, and if I have missed something, please update the article!

Revert to this revision