2011-06-28 245 views
71

如果其中一個元素符合要求,如何在C#中跳出foreach循環?如何跳出C#中的foreach循環?

例如:

foreach(string s in sList){ 
     if(s.equals("ok")){ 
     //jump foreach loop and return true 
    } 
    //no item equals to "ok" then return false 
} 
+0

好笑。在Python中,您只需在sList中'return「ok」: - 在C#中沒有可比的東西嗎? –

+8

@Tim Pietzcker:當然有,請看spender的回答。事實上,習慣了Linq之後,許多命令式代碼看起來就像洞穴圖紙。 – R0MANARMY

回答

131
foreach (string s in sList) 
{ 
    if (s.equals("ok")) 
     return true; 
} 

return false; 

另外,如果你需要做一些其他的事情,你已經找到了項目之後:

bool found = false; 
foreach (string s in sList) 
{ 
    if (s.equals("ok")) 
    { 
     found = true; 
     break; // get out of the loop 
    } 
} 

// do stuff 

return found; 
+6

我建議第二個例子會更好地重寫爲'bool found = callFunctionInFirstCodeSnipper(list); // do stuff' – ICR

60

使用break;,這將退出的foreach迴圈

21
foreach (var item in listOfItems) { 
    if (condition_is_met) 
    // Any processing you may need to complete here... 
    break; // return true; also works if you're looking to 
      // completely exit this function. 
} 

應該這樣做。 break語句只會結束循環的執行,而return語句顯然會終止整個函數。從你的問題來看,你可能想使用返回true;聲明。

7

您可以使用break其跳出最近的封閉循環的,或者你可以直接return true

47

你可以通過採取LINQ路線來避免顯式循環:

sList.Any(s => s.Equals("ok")) 
+21

或者只是使用'Contains(「ok」)''。 –

+6

@Graham Clark:'Contains'假定你正在迭代'ICollection '。'任何'都可以用於'IEnumerable '類型的任何東西,在這種情況下,問題並沒有明確指出它正在迭代的是哪種類型的集合(儘管列表是一個相當公平的猜測)。 – R0MANARMY

1
foreach(string s in sList) 
{ 
    if(s.equals("ok")) 
    { 
      return true; 
    } 
} 
return false; 
-2
var ind=0; 
foreach(string s in sList){ 
    if(s.equals("ok")){ 
     return true; 
    } 
    ind++; 
} 
if (ind==sList.length){ 
    return false; 
} 
+0

很確定'$'是無效的C#語法。 – R0MANARMY

+0

可能不是,我是一個JavaScript/PHP的傢伙。但有足夠的代碼來應用工作解決方案...我刪除了$並添加了var ..可能仍然不是c + –

+0

實際上'var'是一個完全有效的C#關鍵字,所以你很好 – R0MANARMY

1

直接退出循環:

foreach(string s in sList){ 
    if(s.equals("ok")){ 
     return true; 
    } 
} 

// if you haven't returned by now, no items are "ok" 
return false; 

或者使用break

bool isOk = false; 
foreach(string s in sList){ 
    if(s.equals("ok")){ 
     isOk = true; 
     break; // jump out of the loop 
    } 
} 

if(isOk) 
{ 
    // do something 
} 

然而,在你的情況下,它可能會更好做這樣的事情:

if(sList.Contains("ok")) 
{ 
    // at least one element is "ok" 
} 
else 
{ 
    // no elements are "ok" 
} 
0

這不是直接回答你的問題,但有一個更容易方式做你想做的事。如果您至少使用.NET 3.5或更高版本。這就是所謂的Enumerable.Contains

bool found = sList.Contains("ok"); 
3

怎麼樣:

return(sList.Contains("ok")); 

這應該做的伎倆,如果你想要做的 是檢查是否有「確定」,返回答案...

4

使用'break'語句。我覺得很幽默,你的問題的答案在字面上是在你的問題!順便說一下,一個簡單的谷歌搜索可以給你答案。