多维数组越界

时间:2011-11-22 17:20:18

标签: c#

我的代码挂在fi_get[1, 4]行上,并带有“index out of bounds”错误。

lines var是一个字符串列表数组,在运行时它有超过600行文本。我不知道为什么我不能将字符串值赋给[1,4]?它确实为[1,0][1,1]以及[1,2][1,3]分配了值。

    string[,] fi_get = new string[2, 11];

     if (lines[i].Contains("show fabric-interconnect firmware"))
            {
                fi_get[0, 0] = Regex.Replace(lines[i + 2], @".+Running-Kern-Vers:\s(.+)", "$1");
                fi_get[0, 1] = Regex.Replace(lines[i + 3], @".+Running-Sys-Vers:\s(.+)", "$1");
                fi_get[0, 2] = Regex.Replace(lines[i + 4], @".+Startup-Kern-Vers:\s(.+)", "$1");
                fi_get[0, 3] = Regex.Replace(lines[i + 5], @".+Startup-Sys-Vers:\s(.+)", "$1");
                fi_get[1, 0] = Regex.Replace(lines[i + 7], @".+Running-Kern-Vers:\s(.+)", "$1");
                fi_get[1, 1] = Regex.Replace(lines[i + 8], @".+Running-Sys-Vers:\s(.+)", "$1");
                fi_get[1, 2] = Regex.Replace(lines[i + 9], @".+Startup-Kern-Vers:\s(.+)", "$1");
                fi_get[1, 3] = Regex.Replace(lines[i + 10], @".+Startup-Sys-Vers:\s(.+)", "$1");
            }

            if (lines[i].Contains("show fabric-interconnect inventory expand detail"))
            {
                fi_get[0, 4] = Regex.Replace(lines[i + 2], @".+Product Name:\s(.+)", "$1");
                fi_get[0, 5] = Regex.Replace(lines[i + 3], @".+PID:\s(.+)", "$1");
                fi_get[0, 6] = Regex.Replace(lines[i + 4], @".+Serial (SN):\s(.+)", "$1");
                fi_get[0, 7] = Regex.Replace(lines[i + 7], @".+Description:\s(.+)", "$1");
                fi_get[0, 8] = Regex.Replace(lines[i + 10], @".+Serial (SN):\s(.+)", "$1");
                fi_get[0, 9] = Regex.Replace(lines[i + 13], @".+Product Name:\s(.+)", "$1");
                fi_get[0, 10] = Regex.Replace(lines[i + 14], @".+PID:\s(.+)", "$1");
                fi_get[0, 11] = Regex.Replace(lines[i + 15], @".+Serial (SN):\s(.+)", "$1");
                fi_get[1, 4] = Regex.Replace(lines[i + 29], @".+Product Name:\s(.+)", "$1");
                fi_get[1, 5] = Regex.Replace(lines[i + 30], @".+PID:\s(.+)", "$1");
                fi_get[1, 6] = Regex.Replace(lines[i + 31], @".+Serial (SN):\s(.+)", "$1");
                fi_get[1, 7] = Regex.Replace(lines[i + 34], @".+Description:\s(.+)", "$1");
                fi_get[1, 8] = Regex.Replace(lines[i + 37], @".+Serial (SN):\s(.+)", "$1");
                fi_get[1, 9] = Regex.Replace(lines[i + 40], @".+Product Name:\s(.+)", "$1");
                fi_get[1, 10] = Regex.Replace(lines[i + 41], @".+PID:\s(.+)", "$1");
                fi_get[1, 11] = Regex.Replace(lines[i + 42], @".+Serial (SN):\s(.+)", "$1");
            }

2 个答案:

答案 0 :(得分:3)

我看到的错误是fi_get[0, 11] = Regex.Replace(lines[i + 15],因为第二个索引应该在0到10之间! fi_get[1, 11] = Regex.Replace(lines[i + 42]上的错误相同。

回答你的问题

  

为什么我不能将字符串值赋给[1,4]?

请记住,C#数组是基于零的,因此如果您定义fi_get[1, 4],则可以将fi_get[0, 0]的值分配给fi_get [0, 3]
如果您要分配到fi_get[1, 4],则应至少定义fi_get = new string[2, 5]

答案 1 :(得分:2)

我敢打赌这就是这个表达式:

lines[i + 29]

此次运行时i的价值是多少?

i + 29

可能超出范围。如果此代码准确的话,它是唯一可以抛出该行的异常数组索引。