Resources For IT Professionals
United States (English) # Visual Basic.Net Common Errors: "Index was out of range."

## 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

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