[英]Multi dimensional array out of bounds
我的代碼掛在fi_get[1, 4]
,出現“索引超出范圍”錯誤。
var lines
是一個字符串列表數組,在運行時,其中有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");
}
我看到的錯誤是fi_get[0, 11] = Regex.Replace(lines[i + 15]
因為第二個索引應該在0到10之間!
在fi_get[1, 11] = Regex.Replace(lines[i + 42]
上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]
。
我敢打賭,這是這樣的表達:
lines[i + 29]
運行時i
的值是多少?
i + 29
可能超出范圍。 如果此代碼正確,則它是唯一可以在該行上引發的超出范圍的數組索引異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.