我的代码挂在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");
}
答案 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
可能超出范围。如果此代码准确的话,它是唯一可以抛出该行的异常数组索引。