我正在编写一个包含多个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.
}
这可能吗?
由于
答案 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);
}