2012-04-03 146 views
0
 foreach (int i in a.set) 
     { 
      foreach (int k in b.set) 
      { 
       if (i < k) 
       { 
        return true;         
       } 
       else if (i > k) 
       { 
        return false; 
       } 
      } 
     } 


     return false; 
    } 

我有两套,一套包括3,4,6 b.set包括3,4,5嵌套foreach循环C#

的问题是,外环仅迭代一次。但它包含3个元素,为什么?

+0

返回调用不会中断循环,但会退出该方法。 – 2012-04-03 11:49:20

+0

除非我== k内循环不迭代 – Goran 2012-04-03 11:50:11

+2

你真的有疑问..?返回false打破循环的迭代..实现相同的功能使用break。 – gout 2012-04-03 11:50:16

回答

7

你在你的内循环中返回。这立即退出包含方法。

  • i3(的a.set第一要素 - 让我们假设为了现在)。
    • k3(与上述相同)
    • k4 - 因此if条件在内部循环被满足,并且该方法与true返回。

正如你所看到的,你没有得到来自该方法返回之前通过a.set所有值迭代的机会。

+0

不知道。谢谢。 – saturn 2012-04-03 11:50:33

1

这是因为您正在退出foreach-loop,通过在第一次迭代中返回一个值。

1

根据您提供的代码和数据,内循环将在第二次迭代时退出函数并返回true。你的代码中没有办法让外部的foreach多次迭代。

如果你想写一个返回true,如果在任何点设置a比设定b少了一些代码,你应该这样做:

foreach (int i in a.set) 
{ 
    foreach (int k in b.set) 
    { 
     if (i < k) 
     { 
      return true;         
     } 
    } 
} 
return false; 
+0

我不明白为什么我有一个downvote ... – 2012-04-03 11:56:48

2

使用“中断” insted的“回归”,它只中断一个级别

0

也许你想使用break而不是return - 当你返回时(当3> 4时会发生在内部循环的第二次迭代中),它会停止循环的执行并返回从你有这个功能/方法