c#for循环错误的迭代次数

时间:2013-07-04 21:29:33

标签: c# for-loop iteration

我正在编写一个遍历string []数组的函数,并将一些对象添加到列表中。它是加载已保存游戏系统的一部分。它还有很多bug,因为我编写了很多代码,然后才能测试它们。但是在这个调试阶段,我发现了一些奇怪的错误,无法解释或修复 我无法访问一些数据。如果我有原始代码,for循环迭代少于需要1次。如果我向迭代器限制添加+1,它会正常运行。总而言之,我可以迭代-1或+1次,但不能满足我的需要 这是原始代码,迭代次数少于预期:

string str = " start at " + Convert.ToInt32(s[k]) + " " + k;
        for (int i = 0; i < Convert.ToInt32(s[k]); i++)
        {
            k++;
            landOwned.Add(setle.civil.land[Convert.ToInt32(s[k]), Convert.ToInt32(s[k+1])]);
            k++;
            str += "  iteration "+i + " finish " + k;
        }
        throw new ArgumentException(str);

这是文本文件中的行:

f 4894 0 250 -523058 0 0 0 0 0 0 0 0 0 0 0 0 0 35 35 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 3 4 2 4 3 3 4 4 1 0 1 0 1 0 1 2

以下是捕获的exeptions的截图:

enter image description here

2 个答案:

答案 0 :(得分:6)

问题是循环结束测试(k)中使用的变量在循环内递增。

将循环更改为以下内容可解决此问题:

    var endIndex = Convert.ToInt32(s[k]);
    for (int i = 0; i < endIndex; i++)

答案 1 :(得分:2)

回答你的评论,

您可以将for循环视为以下

int i = 0;
while(i < something){
//...


i++
}

每次迭代时,将再次检查while循环中的检查以查看I是否仍然小于某个值,这意味着在您的情况下,它会在每次迭代时将“某事”转换为整数。 @competent_techs解决方案会将此初始值存储到一个单独的变量中,然后只存储检查的值以查看