将Int值设置为Array时抛出IndexOutOfRange异常

时间:2017-02-05 18:31:45

标签: c# mysql arrays exception

在我的应用程序中,教师可以有几个课程,当我排除教师的个人资料时,我必须首先删除他的课程。我正在尝试将此教师的每个class_id放在int数组上,以便稍后删除此数组中包含id的所有类。

到目前为止,这是我的代码:

int x = 0;
int[] count = new int[x];

while (reader_SelectedClasses.Read())
{
    if(x != 0)
    {
        x++;
        count = new int[x];
    }
    count[x] = _class.Class_id = reader_SelectedClasses.GetInt16("class_id");
}

这就是

reader_SelectedClasses.Read()

确实

select class_id from tbl_class where user_id = " + id + ";

当我在MySQL上尝试这个时,这就是回归:

enter image description here

但是当我在DAO类上运行代码时,它会给我一个IndexOutOfRangeException。我错过了什么?已经去了here,但不太明白。有人可以解释几个单词,并为此发布和修改代码吗?

3 个答案:

答案 0 :(得分:2)

  1. 您需要learn how to use a debugger并逐步执行您的计划。

  2. count = new int[x];放弃count中的内容并创建一个包含零的新数组。此数组的索引从0到x - 1

  3. count[x] = ...将数组元素设置为索引x,根据前一行,数组元素超出数组末尾。

  4. 您需要在程序开头只设置count = new int[x]一次,并且仅当x> = 0且x<时才设置count[x] = ... count.Length。

答案 1 :(得分:1)

您正尝试使用List获得array行为 显然,IndexOutOfRangeException是因为您初始化一个空数组,然后尝试在不存在的单元格中为其添加值。

尝试转换为List<int>

List<int> count = new List<int>();

while (reader_SelectedClasses.Read())
{
    int classId = _class.Class_id = reader_SelectedClasses.GetInt16("class_id");
    count.Add(classId);
}

如果你真的需要一个阵列,你可以这样做:

int[] countArray = count.ToArray()

答案 2 :(得分:0)

您正在获取IndexOutOfRange异常,因为您正在尝试访问超出范围的数组中的元素。

在第一行,你设置x = 1.希望控制器进入while循环,当x为1时,它不会输入if循环并执行下一个语句。但是不允许count [1](x = 1),因为你创建的数组只有一个元素,你可以用count [0]访问。 (数组索引从0开始)