C#数组索引错误

时间:2014-02-26 21:31:08

标签: c# arrays indexing

我正在添加的简单数组,但是我不断得到这个Index Out Of Bounds错误。环顾四周,无法弄清楚我哪里出错了,我假设它与我使用pos变量的地方有关。发布任何我认为可能相关的内容。提前谢谢。

const int MAX = 5;
    Account[] db = new Account[MAX];

    // global variable for position in array
    int pos;

    private void Form1_Load(object sender, EventArgs e)
    {
        // initialise the array with instantiated objects
        for (int i = 0; i < MAX; i++)
            db[i] = new Account();
    }

private void OpenAcc_Click(object sender, EventArgs e)
    {
        //hide menu
        hide_menu();

        //make new form elements visible
        tbNameEnt.Visible = true;
        tbBalaEnt.Visible = true;
        SubDet.Visible = true;

        //set pos to the first empty element of array
        pos = Array.FindIndex(db, i => i == null);
    }

private void SubDet_Click(object sender, EventArgs e)
    {
        string textBox1;
        double textBox2;
        int a = 0011228;
        int b = pos + 1;
        int accNo;

        //get and parse input details
        textBox1 = tbNameEnt.Text;
        textBox2 = double.Parse(tbBalaEnt.Text);

        //allocate account number
        accNo = int.Parse(a.ToString() + b.ToString());

        //set details for new object in array
        db[pos].SetAccount(textBox1, accNo, textBox2); //ERROR HERE

        //print account created confirmation message
        ConfMess();

        //OK button then takes us back to menu
    }

2 个答案:

答案 0 :(得分:4)

Array.FindIndex将根据谓词返回位置,如果项目没有匹配将返回-1,对于您的情况,您将在

中分配数组的每个元素
for (int i = 0; i < MAX; i++)
       db[i] = new Account();

这将确保没有item为null,因此从Array.FindIndex返回-1,稍后当您使用该位置pos访问数组元素时,您将获得异常。

这一行:

pos = Array.FindIndex(db, i => i == null);

稍后将pos设置为-1

db[pos].SetAccount(textBox1, accNo, textBox2);

你会得到例外。

答案 1 :(得分:0)

使用实例化的Account对象初始化数组。

无法保证FindIndex()调用将返回有效位置(即pos将被指定为-1)

之后,您可能会引用db [-1],这会引发异常。