System.IndexOutOfRangeException:'索引在数组的边界之外。在开始循环时

时间:2018-07-27 02:04:25

标签: c#

我知道我的问题似乎很笼统和基本,但我似乎找不到问题。当VS开始在整数值“ i”的声明中调试我的代码时,将弹出此错误:

Error Image

Variables at the moment of error

所以我试图在循环之前声明,但仍然存在相同的错误。之后,我更改了变量的类型,但没有更改。但是,当我在“ masaQuery = ...”部分之间声明它时,它开始在for循环的assigment部分引发错误。因此,我对其进行了更改,可以进行欺骗,但结果仍然相同:enter image description here

该代码的第一个版本:

        string[] masaQuery = new string[8];
        masaQuery[0] = uyelik;
        masaQuery[1] = ucretler;
        masaQuery[2] = masalar;
        masaQuery[3] = masaHareket;
        masaQuery[4] = log;
        masaQuery[5] = genelAyarlar;
        masaQuery[6] = adisyon;
        masaQuery[7] = direktAdisyon;
        masaQuery[8] = bekleyenListesi;
        masaQuery[9] = borclular;
        for (int i = 0; i < masaQuery.Length; i++)
        {
            using (SQLiteConnection c = new SQLiteConnection(connStr))
            {
                c.Open();
                using (SQLiteCommand cmd = new SQLiteCommand(masaQuery[i], c))
                {
                    cmd.ExecuteNonQuery();
                }
            }
        }

代码的最新版本:

        string[] masaQuery = new string[9];
        masaQuery[0] = uyelik;
        masaQuery[1] = ucretler;
        masaQuery[2] = masalar;
        masaQuery[3] = masaHareket;
        masaQuery[4] = log;
        int i = 0;
        masaQuery[5] = genelAyarlar;
        masaQuery[6] = adisyon;
        masaQuery[7] = direktAdisyon;
        masaQuery[8] = bekleyenListesi;
        masaQuery[9] = borclular;

        for (; i < masaQuery.Length; i++)
        {
            var query = masaQuery[i];
            using (SQLiteConnection c = new SQLiteConnection(connStr))
            {
                c.Open();
                using (SQLiteCommand cmd = new SQLiteCommand(query, c))
                {
                    cmd.ExecuteNonQuery();
                }
            }
        }

等待您的答案。

2 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

string[] masaQuery = new string[10];

您有10个元素,但是您只创建了一个可容纳9个元素的字符串数组。

答案 1 :(得分:1)

来自array documentation in MSDN

  
      
  • 数组的索引为零:具有n个元素的数组的索引从0n-1
  •   

当您声明一个n = 9的数组时,实际上是从0分配给8的数组索引,而当您使用第9个索引时,将抛出IndexOutOfBoundsException因为该索引不存在。

不是使用n = 9,而是使用n = 10:

string[] masaQuery = new string[10];