指数数组的边界之外

时间:2012-11-12 17:53:47

标签: c#

我有一个错误,告诉“索引超出了数组的范围”我不知道它发生了什么,因为在完成for循环并再次进入循环后它显示出从循环退出时的变量值之前。

        int[,] arrScr = new int[lstTest.Count, cnt2 + 3];
        string[,] arrName = new string[lstTest.Count, cnt2 + 3];
        int p;

        for (i = 0; i < lstTest.Count; i++)
        {
            using (DataTableReader dtr3 = ds.Tables["scord_mark_table" + (i + 1).ToString()].CreateDataReader())
            {
                p = 0;
                while (dtr3.Read())
                {
                    arrName[i, 2 + p] = dtr3[15].ToString();
                    for (int k = 2; k < 12; k++)
                    {
                        arrScr[i, 2 + p] += Convert.ToInt32(dtr3[k].ToString());
                    }
                    p++;
                }
            }

enter image description here

4 个答案:

答案 0 :(得分:2)

k <= 12更改为k < 12

如果这不是您的问题的原因,您应该将k <= 12重写为k < 13,因为这是大多数编码人员习惯读写的惯例。

答案 1 :(得分:2)

dtr3[12]中的内容是什么?它会返回null吗? cnt2的价值是什么?

答案 2 :(得分:1)

这意味着您的数组不包含您尝试访问的元素。

答案 3 :(得分:1)

它将从循环中退出为k = 13,因为k的最后一个有效值是12,然后它经历了循环,执行了k ++(使其成为13)。在这一点上它失败了因为13> 12,那就是它实际退出的时候。