C#でforeachループからジャンプするにはどうすればよいですか?


124

foreach要素の1つが要件を満たしている場合、C#でループから抜け出すにはどうすればよいですか?

例えば:

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

おかしい。Pythonでは、あなたは単にそうするでしょうreturn "ok" in sList:-C#に匹敵するものはありませんか?
Tim Pietzcker

8
@Tim Pietzcker:もちろんあります。消費者の答えを参照してください。実際、Linqに慣れた後、命令型コードの多くは洞窟の図面のように見えます。
R0MANARMY

回答:


220
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
2番目の例は、次のように書き直すことをお勧めしますbool found = callFunctionInFirstCodeSnipper(list); // do stuff
ICR


55

LINQルートを使用することで、明示的なループを回避できます。

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

23
または単に使用しますContains("ok")
グラハムクラーク

7
@Graham Clark:をContains反復していると仮定しますICollection<T>Anytypeのどんなものでも機能しIEnumerable<T>、この場合、質問はそれが繰り返しているコレクションの種類を明示的に示しません(Listただし、かなり公正な推測です)。
R0MANARMY 2011年

32
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ステートメントは明らかに関数全体を終了します。あなたの質問から判断して、あなたはreturn trueを使いたいかもしれません。ステートメント。


7

breakどれが最も近い囲みループからジャンプするか、または直接使用することができますreturn true


5

'break'ステートメントを使用します。あなたの質問への答えが文字通りあなたの質問の中にあるのは滑稽だと思います!ちなみに、単純なGoogle検索で答えが得られた可能性があります。


3

どのように:

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

あなたがやりたいことがすべて「大丈夫」をチェックして答えを返すことであれば、それでうまくいくはずです...


2

それはあなたの質問への直接の答えではありませんが、あなたが望むことをするはるかに簡単な方法があります。少なくとも.NET 3.5以降を使用している場合。Enumerableと呼ばれます。

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


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"
}

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

$有効なC#構文ではないことを確認してください。
R0MANARMY 2011年

おそらくそうではありません。javascript/ phpの人です。しかし、ここには実用的なソリューションを適用するのに十分なコードがあります... $を削除して変数を追加しました。おそらくまだc +ではありません
johnny craig

実際にvarは完全に有効なC#キーワードなので、問題ありません
R0MANARMY
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.