2011-11-22 76 views
0

我的代碼掛在線fi_get[1, 4]上,並且出現「索引越界」錯誤。多維數組越界

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"); 
      } 
+3

這是炸燬設置數組值或讀線[i + 29]? –

+0

這裏有兩個數組;你確定線[i + 29]是否是一個有效的元素? –

回答

2

我敢打賭,它的這種表達:

lines[i + 29] 

什麼是i在這個運行的時間價值?

i + 29 

可能超出範圍。如果這段代碼是準確的,那麼這是唯一可以拋出該行的數組索引越界異常。

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]

+0

thx我意識到我做了什麼之前,你評論對此感到抱歉:) –

+0

@johnjohnson:你解決你的問題與我的答案或你有同樣的問題了嗎? – Marco