C# IndexOutOfRangeException

Note

An IndexOutOfRangeException has occurred. This happens in C# programs that use array types. This exception will typically occur when a statement tries to access an element at an index greater than the maximum allowable index.

Example

Warning: exclamation mark

First this program shows the usage of the array index access. When you create an array of many elements, you can access those elements through the indices of zero through the maximum length minus one.

Array

This means that for an array of 100 elements, you can access array[0] through array[99]. You can load and store values into these elements, which are considered variables and not values.

C# program that accesses array out of bounds

class Program
{
    static void Main()
    {
	// Allocate an array of one-hundred integers.
	// ... Then assign to positions in the array.
	// ... Assigning past the last element will throw.
	int[] array = new int[100];
	array[0] = 1;
	array[10] = 2;
	array[200] = 3;
    }
}

Exception thrown by program

Unhandled Exception: System.IndexOutOfRangeException:
Index was outside the bounds of the array.
   at Program.Main() in ...Program.cs:line 8
Main method

In Main, we use a new array of length 100. This means that the array is a reference to object data of size 100 integers. You can access the array elements through array subscripts, as with array[0], array[1], through array[99].

Tip:The top index you can access equals the total length minus one. If you access an index past 99, you get an IndexOutOfRangeException.

If keyword

To avoid the exception, you can insert bounds checks, as with an if-statement. An alternative is to simply make the array length much larger when you allocate it. If you avoid if-statement checks, you can improve performance.

If-Statement: Else If, Else

Negative array indices. You will encounter the IndexOutOfRangeException if you try to assign to an index in an array that is negative. In the C# language, native arrays are indexed beginning at zero.

Note:The first element is always available at index zero.
There are ways to simulate non-zero based arrays.

Summary

The C# programming language

Here we saw the IndexOutOfRangeException. We explained the relation between array lengths and array indices. You can always access the array indexes up to the array length minus one.

Also:This off-by-one difference is critical to keep in mind in some programs. Errors in this translation can be serious.


C#: Exception