An unhandled exception of type 'System.IndexOutOfRangeEx

本文关键字:System IndexOutOfRangeEx type unhandled exception of An | 更新日期: 2023-09-27 18:19:31

这是我的程序:(

private void btnPhone_Click(object sender, EventArgs e)
{
    string[,] numbers = new string[5, 1];
    numbers[0, 0] = "Pedro";
    numbers[0, 1] = "4633585";
    numbers[1, 0] = "Juan";
    numbers[1, 1] = "6364799";
    numbers[2, 0] = "Pepe";
    numbers[2, 1] = "7172572";
    numbers[3, 0] = "Lucia";
    numbers[3, 1] = "8885200";
    numbers[4, 0] = "Marta";
    numbers[4, 1] = "7171700";
    for (int i = 0; i <= 5; i++)
    {
        if (numbers[i, 0] == txtName.Text)
        {
            txtNumber.Text = numbers[i, 1];
        }
    } 
}

An unhandled exception of type 'System.IndexOutOfRangeEx

for (int i = 0; i < numbers.GetLength(0); i++)
{
    if (numbers[i, 0] == txtName.Text)
    {
       txtNumber.Text = numbers[i, 1];
    }
}

至少通过这种方式,您没有明确声明for循环应该完成多少次迭代。谨慎行事,避免出现这样的情况(您可能希望在将来添加另一个元素或删除一个元素)。你现在这样做的方式是不好的做法,如果不仅仅是为了捣乱,你还必须通过任何更改来保持数组大小和循环的同步。

它应该是new string[5, 2]。并且在循环中,它应该是i<5而不是i<=5

您没有numbers[5, i],因为c#中的数组是零对齐的,所以当您尝试访问它时,它超出了范围。尝试使用

for(int i = 0; i < 5; i++)

数组的第二个维度只有一个元素,但您尝试访问两个元素。

numbers = new string[5, 1];
numbers[0, 0] = "Pedro";
numbers[0, 1] = "4633585";

尝试

numbers = new string[5, 2];

相反。