2013-10-19 146 views
0

由於某些原因,在這個for循環中,i達到1,並導致index out of range錯誤。 Items.Count等於4,我檢查使用斷點,StockList.Count也等於4.我似乎無法弄清楚爲什麼我達到一個,任何想法?For-Loops很奇怪

for (int i = 0; i <= (Items.Count/4) - 1; i++) 
{ 
    for (int ii = 0;ii <= Program.StockList.Count - 1;i++) 
    { 
     if (Items[(i * 4) + 3] == Program.StockList[ii].ID) //Crash here 
     { 
      MessageBox.Show(Program.StockList[ii].Name + " Match!"); 
     } 
    } 
} 
+2

你在你的第二個for循環遞增'i'。發生這種事時我討厭它。 – dialer

+1

選擇好的變量名稱是該戰鬥的90%,'i'和'ii'不是很好的名字。 –

+0

爲了加入到變量命名的戰鬥中,使用循環的一個很好的例子是它使用i作爲第一維,j作爲第二維,k作爲第三維。 – BAS

回答

5

這(第二循環):

for (int ii = 0;ii <= Program.StockList.Count - 1;i++) 

應該是這樣的:

for (int ii = 0;ii <= Program.StockList.Count - 1;ii++) 

我敢肯定,這是很難在這裏發現的差異,所以毫不奇怪有人甚至在你的代碼中更難。考慮將內部循環使用j,並將代碼劃分爲更小的函數以避免此類錯誤。

此外,通過在下面的評論kenny注意到,您可以用foreach循環替換第二環:

foreach (var stock in Program.StockList) 
{ 
    if (Items[(i * 4) + 3] == stock.ID) 
    { 
     //... 
    } 
} 
+0

啊,就是這樣。在我用過的以前的語言中,我不必做i ++的事情,所以我必須在嵌套循環中注意這一點。謝謝! – Nathan

+5

@Nathan你知道foreach迭代集合嗎? – kenny