2013-10-19 138 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