C# | Array IndexOutofRange Exception

C# supports the creation and manipulation of arrays, as a data structure. The index of an array is an integer value that has value in the interval [0, n-1], where n is the size of the array. If a request for a negative or an index greater than or equal to the size of the array is made, then the C# throws an System.IndexOutOfRange Exception. This is unlike C/C++ where no index of the bound check is done. The IndexOutOfRangeException is a Runtime Exception thrown only at runtime. The C# Compiler does not check for this error during the compilation of a program.

Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to demonstrate the 
// IndexOutofRange Exception in array
using System;
  
public class GFG {
      
    // Main Method
    public static void Main(String[] args)
    {
        int[] ar = {1, 2, 3, 4, 5};
          
        // causing exception
        for (int i = 0; i <= ar.Length; i++)
            Console.WriteLine(ar[i]);
    }
}

chevron_right


Runtime Error:



Unhandled Exception:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at GFG.Main (System.String[] args) <0x40bdbd50 + 0x00067> in :0
[ERROR] FATAL UNHANDLED EXCEPTION: System.IndexOutOfRangeException: Index was outside the bounds of the array.
at GFG.Main (System.String[] args) <0x40bdbd50 + 0x00067> in :0

Output:

1
2
3
4
5

Here if you carefully see, the array is of size 5. Therefore while accessing its element using for loop, the maximum value of index can be 4 but in our program, it is going till 5 and thus the exception.

Let’s see another example using ArrayList:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to demonstrate the 
// IndexOutofRange Exception in array
using System;
using System.Collections;
  
public class GFG {
      
    // Main Method
    public static void Main(String[] args)
    {
          
        // using ArrayList
        ArrayList lis = new ArrayList();
        lis.Add("Geeks");
        lis.Add("GFG");
        Console.WriteLine(lis[2]);
    }
}

chevron_right


Runtime Error: Here error is a bit more informative than the previous one as follows:

Unhandled Exception:
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.Collections.ArrayList.get_Item (Int32 index) <0x7f2d36b2ff40 + 0x00082> in :0
at GFG.Main (System.String[] args) <0x41b9fd50 + 0x0008b> in :0
[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
at System.Collections.ArrayList.get_Item (Int32 index) <0x7f2d36b2ff40 + 0x00082> in :0
at GFG.Main (System.String[] args) <0x41b9fd50 + 0x0008b> in :0

Lets understand it in a bit of detail:

  • Index here defines the index we are trying to access.
  • The size gives us information of the size of the list.
  • Since size is 2, the last index we can access is (2-1)=1, and thus the exception

The correct way to access array is :

for (int i = 0; i < ar.Length; i++) 
{
}

Handling the Exception:

  • Use for-each loop: This automatically handles indices while accessing the elements of an array.
    • Syntax:
      for(int variable_name in array_variable)
      {
           // loop body
      }
      
      
  • Use Try-Catch: Consider enclosing your code inside a try-catch statement and manipulate the exception accordingly. As mentioned, C# won’t let you access an invalid index and will definitely throw an IndexOutOfRangeException. However, we should be careful inside the block of the catch statement, because if we don’t handle the exception appropriately, we may conceal it and thus, create a bug in your application.


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.