【问题标题】:IndexOutOfRange Exception Thrown on Setting Int value to Array将 Int 值设置为数组时引发 IndexOutOfRange 异常
【发布时间】:2017-06-22 16:20:01
【问题描述】:

在我的应用中,一位教师可以有多个班级,当我排除一位教师的个人资料时,我必须首先删除他的班级。我正在尝试将这个老师的每个 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 上尝试这个时:

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

【问题讨论】:

  • if 条件永远不会执行,x 的值永远不会增加。因此,您通常会为同一索引添加价值。
  • 编辑您的问题后,我撤回了我的 cmets。
  • 你需要逐行遍历你的逻辑,你会确切地看到问题出在哪里。您正在尝试获取空数组的第一个索引。还有 x 将如何增加?
  • @GK 将其全部更改为零,仍然错误。
  • @Pelicer 数组为空,即 0 项。您尝试在索引 0 处获取项目,这是填充数组中的第一个索引,但您的数组为空,因此没有索引 0,因此索引超出范围。

标签: c# mysql arrays exception


【解决方案1】:
  1. 您需要learn how to use a debugger 并逐步完成您的程序。

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

  3. count[x] = ... 将数组元素设置为索引x,根据前一行,该元素位于数组末尾之后。

您只需在程序开始时设置一次count = new int[x],并且仅在 x >= 0 且 x count[x] = ...。

【讨论】:

    【解决方案2】:

    您正在尝试使用array 实现List 行为。
    显然,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()
    

    【讨论】:

    • 最后我使用了 Dour High Arch 的答案,但是这个列表也很有效,我会检查我的代码。也许我会使用列表而不是数组。
    • Ofir 的答案和我的都可以使用。如果您在阅读之前不知道reader_SelectedClasses 中的课程数量,您应该使用List
    【解决方案3】:

    您收到 IndexOutOfRange 异常,因为您尝试访问超出范围的数组中的元素。

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

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      相关资源
      最近更新 更多