我正在编写一个遍历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的截图:
答案 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解决方案会将此初始值存储到一个单独的变量中,然后只存储检查的值以查看