C# 循环不循环 if 语句

本文关键字:循环 语句 if | 更新日期: 2023-09-27 18:31:16

>我在循环中有一个 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 中调用,但到目前为止没有任何效果。那么我忽略了什么超级明显的事情呢?

C# 循环不循环 if 语句

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

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

第一次,虽然循环 a = n,

而 n 为零,所以当第二次计算 if 时 n =1 a = 0 arrayListFromElse[n] = 某物> 0

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

之后,if 语句if ((int)arrayListFromElsewhere[n] < a)始终为假。

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

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

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