C#报”IndexOutOfRangeException”的原因以及解决办法

  • Post category:C#

触发“IndexOutOfRangeException”异常通常是因为代码尝试访问不合法的数组索引。在 .NET 中,索引从 0 开始,如果访问数组中不存在的索引位置,就会产生该异常。以下是示例代码和解决办法:

示例一

int[] nums = new int[3];
nums[3] = 4; // 访问了数组中不存在的索引位置,会引发IndexOutOfRangeException异常

解决办法: 数组的最大索引应该是 .Length – 1。 在这种情况下,数组的长度是 3,因此允许访问的最大索引是2。因此,可以通过将代码中的 nums[3] 更改为 nums[2] 来解决问题。

int[] nums = new int[3];
nums[2] = 4; // 访问正确的索引位置

示例二

List<int> numbers = new List<int>() { 1, 2, 3 };
int number = numbers[3]; // 访问了List<int>中不存在的索引位置,会引发IndexOutOfRangeException异常

解决办法:使用List.Count属性来检查有效的索引位置。在上述示例中,List已经包含了3个元素,因此允许的最大索引值为2。可以使用以下代码来检查要访问的索引是否合法:

List<int> numbers = new List<int>() { 1, 2, 3 };
if (numbers.Count > 3)
{
    int number = numbers[3];
}

在上述代码中,我们首先检查要访问的索引是否超出了列表的大小,以避免触发IndexOutOfRangeException。