C# 中的 IndexOutOfRangeException

本文关键字:IndexOutOfRangeException 中的 | 更新日期: 2023-09-20 09:32:38

IndexOutOfRangeException 是一个异常,在访问索引超出其范围的集合元素时将引发该异常。 当使用无效索引访问集合的成员时,会发生这种情况。

以下示例引发IndexOutOfRange异常:

示例:


int[] arr = new int[5] { 10, 30, 25, 45, 65};
Console.WriteLine(arr[0]);
Console.WriteLine(arr[1]);
Console.WriteLine(arr[2]);
Console.WriteLine(arr[3]);
Console.WriteLine(arr[4]);
Console.WriteLine(arr[5]); // throws IndexOutOfRange exception

在上面的示例中,arr包含五个元素。当尝试访问值超过其总元素时,它将引发IndexOutOfRange异常。 上面,尝试使用 arr[5] 访问第 6 个元素将引发IndexOutOfRange异常。

防止索引超出范围异常的解决方案(Solutions to Prevent IndexOutOfRangeException)

解决方案 1:获取集合中的元素总数,然后检查集合的上限是否比其元素数少 1。

以下示例演示如何修复IndexOutOfRange异常:

示例:

int[] arr = new int[5] { 10, 30, 25, 45, 65};
Console.WriteLine(arr[0]);
Console.WriteLine(arr[1]);
Console.WriteLine(arr[2]);
Console.WriteLine(arr[3]);
Console.WriteLine(arr[4]);
if(arr.Length >= 6)
    Console.WriteLine(arr[5]);
}

解决方案 2:使用try catch blocks捕获IndexOutOfRangeException

示例:

static void Main()
{
    try
    {
        Console.WriteLine(arr[0]);
        Console.WriteLine(arr[1]);
        Console.WriteLine(arr[2]);
        Console.WriteLine(arr[3]);
        Console.WriteLine(arr[4]);
        Console.WriteLine(arr[5]); // throws IndexOutOfRange exception
    }
    catch(Exception ex)
    {
        Console.WriteLine("Error: {0}", ex.Message);
    }
}

在上面的示例中,包装在 try 块中的整个代码可能会引发错误。 catch 块具有可以捕获任何异常的Exception筛选器。 因此,当 try 块中的 arr[5] 语句引发异常时,catch 块会捕获IndexOutOfRange异常并显示错误消息,并继续执行。


本文内容总结: