类型为#System; IndexOutOfRangeException的未处理异常

时间:2014-08-26 13:40:36

标签: c#

这是我的节目:(

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

至少这种方式你没有明确地声明for循环应该完成多少次迭代。安全地玩,以避免这样的情况(您可能希望在将来添加另一个或删除元素)。你现在这样做的方式是不好的做法,如果不仅仅是因为你要做的事情要保持数组大小并通过任何改变使循环同步。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

numbers = new string[5, 1];

numbers[0, 0] = "Pedro";
numbers[0, 1] = "4633585";

尝试

numbers = new string[5, 2];

代替。