C#继续在foreach内部

时间:2012-07-25 16:52:54

标签: c# for-loop foreach continue

  

可能重复:
  continue and break with an extended scope

我有一个问题。我不知道如何在foreach内部继续“for”。

代码:

for(int i = 0; i < ...; i++)
{
  foreach(´´ .. in ´´)
  {
    if(,,.Value == null)
      // A!
  }
}

我需要更换“A!”代码继续“for”!不是foreach。我使用了基本的继续,但它只适用于foreach。

解决 用:

for(int i = 0; i < ...; i++)
{
  bool Ab = false;

  foreach(´´ .. in ´´)
  {
    if(,,.Value == null)
      Ab = true;
  }

  if(Ab)
    continue;
}

4 个答案:

答案 0 :(得分:3)

如果你需要停止内循环,并继续外循环,你只需要在内循环中使用break语句

for(int i = 0; i < ...; i++)
{   
    foreach(var thing in something)   
    {     
        if(thing.Value == null)       
        {
            break; 
        } 
    }

}

答案 1 :(得分:1)

如果这是您的实际代码结构,您break foreach for将立即继续下一次迭代,因为当前的结束了。

但是,如果在for循环完成后foreach次迭代中有更多代码,则可能属于罕见案例中的一个(母亲) ,保护孩子的耳朵)可能想要使用goto跳到当前for次迭代的结尾。

然而,更简洁的方法是设计内部循环,使其出现在外循环的末尾,这样内部循环中的break就是外部continue循环。

答案 2 :(得分:0)

你不能只break内部foreach循环吗?

for (int i = 0; i < blah; i++) {
  foreach (var item in collection) {
    if (ShouldContinue(item)) {
      break;
    }
    // other stuff
  }
  // don't put things here
}

如果您需要放置don't put things here的代码,如果将内循环包装在函数中,则可能会更清楚:

bool ProcessOrContinue(IEnumerable collection) {
  foreach (var item in collection) {
    if (ShouldContinue(item)) {
      return true;
    }
    // other stuff
  }
  return false;
}

for (int i = 0; i < blah; i++) {
  if (ProcessOrContinue(collection)) continue;
  // more things
}

答案 3 :(得分:0)

Continue是一个花哨的转到。你可以在这里使用递归。