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

Gur*_*epS -1 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.
} 
Run Code Online (Sandbox Code Playgroud)

这可能吗?

谢谢

Dan*_*ker 16

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

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

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

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"
}
Run Code Online (Sandbox Code Playgroud)

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

如果这看起来很模糊,你可以用continue关键字实现相同的功能(如你所猜测的那样):

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

    // item is not an "Alan"
}
Run Code Online (Sandbox Code Playgroud)

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

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