2012-04-03 215 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時會發生在內部循環的第二次迭代中),它會停止循環的執行並返回從你有這個功能/方法