How do I skip an iteration of a `foreach` loop?
In Perl I can skip a foreach (or any loop) iteration with a next;
command.
Is there a way to skip over an iteration and jump to the next loop in C#?
foreach (int number in numbers)
{
if (number < 0)
{
// What goes here to skip over the loop?
}
// otherwise process number
}
You want:
foreach (int number in numbers) // <--- go back to here --------+
{ // |
if (number < 0) // |
{ // |
continue; // Skip the remainder of this iteration. -----+
}
// do work
}
Here's more about the continue
keyword .
Update: In response to Brian's follow-up question in the comments:
Could you further clarify what I would do if I had nested for loops, and wanted to skip the iteration of one of the extended ones?
for (int[] numbers in numberarrays) {
for (int number in numbers) { // What to do if I want to
// jump the (numbers/numberarrays)?
}
}
A continue
always applies to the nearest enclosing scope, so you couldn't use it to break out of the outermost loop. If a condition like that arises, you'd need to do something more complicated depending on exactly what you want, like break
from the inner loop, then continue
on the outer loop. See here for the documentation on the break
keyword . The break
C# keyword is similar to the Perl last
keyword.
Also, consider taking Dustin's suggestion to just filter out values you don't want to process beforehand:
foreach (var basket in baskets.Where(b => b.IsOpen())) {
foreach (var fruit in basket.Where(f => f.IsTasty())) {
cuteAnimal.Eat(fruit); // Om nom nom. You don't need to break/continue
// since all the fruits that reach this point are
// in available baskets and tasty.
}
}
另一种方法是在执行循环之前使用LINQ进行过滤:
foreach ( int number in numbers.Where(n => n >= 0) )
{
// process number
}
你也可以翻转你的if测试:
foreach ( int number in numbers )
{
if ( number >= 0 )
{
//process number
}
}
链接地址: http://www.djcxy.com/p/30382.html
上一篇: 将Generic.List [T] ForEach方法的ScriptBlock作为Action [T]投射
下一篇: 我如何跳过`foreach`循环的迭代?