0

我在循环中有一个 if 语句,使用Debug.Write()我已经确定对于循环的第一次迭代,一切都按预期工作,但在随后的迭代中,if 块被忽略,但循环中的所有其他内容仍然执行。我尝试了一些变体,但到目前为止,它们都没有奏效。

最初我有:

Private int Loop()
{
    int a = 50000;
    int n = 0;
    for (int n = 0; n < arrayListFromElsewhere.Count(); n++)
    {
        if ((int)arrayListFromElsewhere[n] < a)
        {
            Debug.WriteLine("if loop: " + n);
            a = n;
        }
        Debug.WriteLine("N: " + n);
    }
}

哪个会打印:

if loop: 0
N: 0
N: 1
N: 2
etc...

我已经验证了 ArrayList 只包含整数,用一段时间替换了 for 并尝试将 if 移动到一个单独的函数中,该函数在 for/while 内部调用,但到目前为止没有任何效果。那么我忽略了什么非常明显的事情呢?

4

5 回答 5

8

在循环的第一次迭代之后,您已设置an. 从那时起,只有当 中的值为负时,您才会进入该if语句。是否有任何负值?(顺便说一下,一个简短但完整的失败示例确实会有所帮助 - 以及对您正在尝试做的事情的一些解释。)ArrayList

(顺便说一句,你为什么还在使用非泛型集合?2004 正在调用 - 它想要它的代码!)

于 2012-04-15T19:34:02.647 回答
2

第一次虽然循环 a = n 而 n 为零,所以当第二次评估 if 时 n =1 a = 0 arrayListFromElsewhere[n] = something > 0

于 2012-04-15T19:34:28.537 回答
1

在您的第一次迭代a中变为 0(n第一次运行时的值)。

之后 if 语句if ((int)arrayListFromElsewhere[n] < a)总是错误的。

于 2012-04-15T19:34:55.817 回答
0

是的,if block将根据您指定的条件被忽略。由于在第一个 if 块中,您已经设置了a = n. 在那种情况下a will be 0。因此,后续的 if 块将为 false 并且不会被执行。

于 2012-04-15T19:35:19.983 回答
0

如果数组中只有正数,则在第一次迭代后 a 将为 0(if 中的第一个 n 为 0)并且它不会再进入 if。

此外,您已经 n 声明了两次。

于 2012-04-15T19:36:52.080 回答