2009-10-06 67 views
-1

我正在为多个if语句编写for循环。For循环 - 如果布尔条件计算结果为false,则继续

如果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. 
} 

这可能吗?

感谢

+3

示例代码将是一个很大的帮助。我不知道你的意思是“如果语句评估为false”,如果发生这种情况,那么内部的东西不会被执行,并且循环会像平常一样继续。 – DisgruntledGoat 2009-10-06 22:37:08

+0

提供示例代码。 – abelenky 2009-10-06 22:40:41

回答

16

你需要像continue关键字功能 - 你考虑过使用continue关键字,然后呢?

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

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

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

因此,上面的循环将在遇到的第一个“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" 
    } 
} 
+0

感谢您的解释。我知道Where()方法,但认为可以像上面那样处理事情,但我想这不是正确的方法!谢谢。 – dotnetdev 2009-10-06 22:58:49

1

你的意思是这样吗?

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

你是否希望增量器完成for循环在循环体中?

1

我不知道我的理解是否正确。你有一个for循环这样的事情

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

    // do something 
} 

编辑:

如果继续使用它增加了我一次。如果你在循环中使用i ++,它显然会增加两倍。如果你只想在某个条件下进行修改,可以使用for循环,如下所示:

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

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); 
}