📜  C#|数组IndexOutofRange异常

📅  最后修改于: 2021-05-29 23:17:04             🧑  作者: Mango

C#支持将数组作为数据结构进行创建和操作。数组的索引是一个整数值,其值的范围为[0,n-1],其中n是数组的大小。如果请求一个负数或索引大于或等于数组的大小,则C#会引发System.IndexOutOfRange异常。这与C / C++不同,在C / C++中,没有完成绑定检查的索引。 IndexOutOfRangeException是仅在运行时引发的运行时异常。 C#编译器在程序编译期间不会检查此错误。

例子:

// 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]);
    }
}

运行时错误:

输出:

1
2
3
4
5

在这里,如果您仔细地看一下,数组的大小为5。因此,在使用for循环访问其元素时,index的最大值可以为4,但是在我们的程序中,它将达到5,因此是异常。

让我们来看另一个使用ArrayList的示例:

// 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]);
    }
}

运行时错误:与以前的错误相比,这里的错误更具信息性,如下所示:

让我们更详细地了解一下:

  • 此处的索引定义了我们尝试访问的索引。
  • 大小为我们提供了列表大小的信息。
  • 由于size为2,所以我们可以访问的最后一个索引为(2-1)= 1,因此例外

访问数组的正确方法是:

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

处理异常:

  • 使用for-each循环:在访问数组的元素时,它会自动处理索引。
    • 句法:
      for(int variable_name in array_variable)
      {
           // loop body
      }
      
      
  • 使用Try-Catch:考虑将代码包含在try-catch语句中,并相应地处理异常。如前所述,C#不允许您访问无效的索引,并且肯定会抛出IndexOutOfRangeException。但是,我们应该在catch语句的块内小心,因为如果我们没有适当地处理异常,我们可能会将其隐藏,从而在您的应用程序中创建错误。