For循环 - 如果布尔条件的计算结果为false,则继续

时间:2009-10-06 22:31:12

标签: c#

我正在编写一个包含多个if语句的for循环。

如果for语句中的if语句(或其中的一部分)的计算结果为false,那么循环不会退出,而是整数迭代增加1并继续循环(我需要像continue;关键字)。

示例:

for (int i = 0; i <= Collection.Count && Collection[i].Name != "Alan"; i++)
{
    // If name is not Alan, increment i and continue the loop.
} 

这可能吗?

由于

4 个答案:

答案 0 :(得分:16)

您需要continue关键字等功能 - 您考虑过使用continue关键字吗?

更新:您的示例代码很难破译。

for (int i = 0; i <= Collection.Count && Collection[i].Name != "Alan"; i++)
{
    // If name is not Alan, increment i.
} 

for循环有三个部分,由两个分号分隔。第一部分初始化循环变量。第二部分是每次迭代即将开始时计算的表达式;如果为false,则循环终止。第三部分在每次迭代后执行。

因此,上面的循环将在它遇到的第一个“Alan”处退出,并且每次完成迭代时它都会递增i。最后,如果没有Alans,它将执行最后一次,i等于Collection.Count,这比集合中的最大有效索引大一。因此,当Collection[i]超出范围时,您会尝试访问i,这会产生异常。

也许你想要这个:

foreach (var item in Collection.Where(i => i.Name != "Alan"))
{
    // item is not an "Alan"
}

您可以将Where扩展方法视为过滤集合的一种方式。

如果这看起来很模糊,您可以使用continue关键字(正如您猜测的那样)实现相同的目标:

foreach (var item in Collection)
{
    if (item.Name == "Alan")
        continue;

    // item is not an "Alan"
}

或者您可以将代码放在if的块中:

foreach (var item in Collection)
{
    if (item.Name != "Alan")
    {
        // item is not an "Alan"
    }
}

答案 1 :(得分:1)

你的意思是这样吗?

for (int i = 0; i < 100; ) {
    if (!condition1) {
        i++;
    }
    if (!condition2) {
        i++;
    }
    if (!condition3) {
        i++;
    }
}

您是否希望完成for循环的增量器位于循环体中?

答案 2 :(得分:1)

我不确定我是否正确理解。你有一个像这样的for循环

for (int i = 0; i < 10; i++)
{
    // do something
    if (!b1)
      i++

    // do something
}

编辑:

如果您使用继续,它只会增加一次。如果你在循环中使用i ++,它会明显增加两倍。如果您只想在条件上进行icrement,请使用像这样的for循环

for(int i = 0; i&lt; 10)//这与while循环非常相似。

答案 3 :(得分:0)

从您的示例代码中,我认为您正在搜索“Alan”这个名称。 这是对的吗?

如果是这样,请构建您的循环:

for (int i = 0; i < Collection.Count; i++)
{
    if (Collection[i].Name == "Alan")
    {
        break;  // We found the name we wanted!
    }

    // Otherwise: Keep going to look for the name further on.
}

if (i == Collection.Count)
{
    Console.WriteLine("Alan is not found");
}
else
{
    Console.WriteLine("Alan found at position {0}", i);
}