代码之家  ›  专栏  ›  技术社区  ›  GurdeepS

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

c#
  •  -1
  • GurdeepS  · 技术社区  · 15 年前

    我正在用多个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 回复  |  直到 15 年前
        1
  •  16
  •   Daniel Earwicker    15 年前

    你需要像 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,它将执行最后一次 等于 Collection.Count ,大于集合中的最大有效索引。因此,当您尝试访问时,它肯定会抛出一个异常 Collection[i] 什么时候? 超出范围。

    也许你想要这个:

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

    你可以想到 Where 作为筛选集合的一种方法的扩展方法。

    如果这看起来很模糊,您可以用 持续 关键字(如您所料):

    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"
        }
    }
    
        2
  •  1
  •   Jay Riggs    15 年前

    你的意思是这样吗?

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

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

        3
  •  1
  •   JCasso    15 年前

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

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

    编辑:

    如果你使用continue,它只增加一次i。如果在循环中使用i++,它显然会增加两倍。如果只想在某个条件上执行,请使用如下for循环

    对于(int i=0;i<10)//这与while循环非常相似。

        4
  •  0
  •   abelenky    15 年前

    从您的示例代码中,我认为您正在搜索名称“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);
    }