2012-08-29 26 views
3

Im做這樣的:試圖int.parse多陣列串

string[,] string1 = {{"one", "0"},{"Two", "5"},{"Three","1"}}; 
int b = 0; 

for(int i = 0; i <= string1.Length; i++) 
{ 
    b = int.Parse(string1[i, 1]); // Error occurs here 
} 

即時得到一個錯誤說,「索引程度陣列的限制」(或類似的東西,該誤差是在丹麥)。

+2

** WOW **這裏有很多人發佈相同的不正確答案。好問問題;-) –

+1

我希望這個問題得到一個「普遍問題」徽章。它絕對值得一個。非常有趣的答案。 – tehdoommarine

回答

8

有兩個問題:

  • string1.Length將返回6,因爲這是在長度數組
  • 您使用<=用於比較的,所以它實際上試圖重複7倍。

for循環應該是:

for (int i = 0; i < string1.GetLength(0); i++) 

GetLength(0)這裏的調用將返回3, 「第一」 維度的大小。對GetLength(1)的調用返回2,因爲第二個維度的大小爲2.(但是,您不需要這麼做,因爲基本上對每個「行」的第二個「列」進行了硬編碼。)

有關更多詳細信息,請參閱文檔Array.GetLength()

2

你已經有了正確的答案,我會更新我的正確答案。到右迭代應

 for (int i = 0; i < string1.GetLength(0); i++) 
     { 
      b = int.Parse(string1[i, 1]); 
     } 

i由於代表所述第一尺寸的長度,並且固定1將返回數,即第二元件。

對不起,我先給了錯誤的答案。

+0

不起作用,因爲它*是一個二維數組。發帖前檢查! –

+0

@DanPuzey的確,感謝您指出了這一點。 –

0

變化到

for(int i = 0; i <= string1.GetLength(0); i++) 
{ 
b = Int32.Parse(string1[i][0]); 
} 

您的代碼索引1處闖民宅,而不是0,這導致已知爲Array out of bound

+0

不起作用。發帖前檢查! –

+0

@DanPuzey: - 你是對的,我們失去了對主要罪魁禍首的視線。固定.... – perilbrain

7

你的數組邊界是不正確的在循環異常:

for(int i = 0; i <= string1.Length; i++) 

應閱讀:

for(int i = 0; i < string1.GetLength(0); i++) 

有兩件事情是錯誤的:<=<意味着你要去一個項目太遠,.Length返回數組(6)的總長度與GetLength(0)返回第一維(3)的長度。

0

i <= string1.Length更改爲i < string1.Length

+0

不,這仍然會嘗試迭代6次... –

0

嘗試這種情況:

for(int i = 0; i < string1.GetLength(0) ; i++) 
{ 
    b = int.parse(string1[i, 0]); // Error occurs here 
} 

Array.GetLength Method

獲取一個32位整數,它表示在陣列的指定尺寸的元素數。

+3

不,那仍然會失敗...看到我和丹的答案... –

+0

@JonSkeet謝謝指出。 –

0

另外值得一提的是int.Parse可能會拋出FormatException,請考慮int.TryParse