C # 'da foreach döngüsünden nasıl atlarım?


125

foreachÖğelerden biri gereksinimi karşılıyorsa C # 'da bir döngüden nasıl çıkabilirim?

Örneğin:

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

Komik. Python'da yaparsınız return "ok" in sList:- C # ile karşılaştırılabilir bir şey yok mu?
Tim Pietzcker

8
@Tim Pietzcker: Elbette var, harcayanın cevabına bakın. Aslında, Linq'e alıştıktan sonra, birçok zorunlu kod mağara çizimlerine benziyor.
R0MANARMY

Yanıtlar:


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

return false;

Alternatif olarak, öğeyi bulduktan sonra başka şeyler yapmanız gerekirse:

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
İkinci örneğin daha iyi yazılmasını öneririmbool found = callFunctionInFirstCodeSnipper(list); // do stuff
ICR


55

LINQ rotasını alarak açık döngüleri önleyebilirsiniz:

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

23
veya sadece kullanın Contains("ok").
Graham Clark

7
@Graham Clark: Containsbir ICollection<T>. Bu Anytürden herhangi bir şey üzerinde çalışır IEnumerable<T>ve bu durumda soru, ne tür bir koleksiyonun üzerinde yinelendiğini açıkça göstermez ( Lista oldukça makul bir tahmindir).
R0MANARMY

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

Hile yapmalı. Break ifadesi döngünün yürütülmesini sonlandırırken, return ifadesi açıkça tüm işlevi sonlandıracaktır. Sorunuzdan yola çıkarak doğru dönüşünü kullanmak isteyebilirsiniz; Beyan.


7

En breakyakın çevreleyen döngüden hangi sıçramaları kullanabilir veya doğrudanreturn true


5

'Break' ifadesini kullanın. Sorunuzun cevabının tam anlamıyla sorunuzda olması komik buluyorum! Bu arada, basit bir Google araması size cevabı verebilirdi.


3

ne dersin:

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

Yapmak istediğiniz tek şey "tamam" olup olmadığını kontrol etmek ve yanıtı geri vermekse hile yapmalı ...


2

Sorunuzun doğrudan cevabı değil ama istediğinizi yapmanın çok daha kolay bir yolu var. En azından .NET 3.5 veya üstünü kullanıyorsanız. Buna Numaralandırılabilir denir.

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

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

1

Ya döngüden çıkıp dönün:

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

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

Veya şunu kullanın 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
}

Ancak, sizin durumunuzda şöyle bir şey yapmak daha iyi olabilir:

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

Kesinlikle $geçerli bir C # sözdizimi değil.
R0MANARMY

Muhtemelen hayır, ben bir javascript / php adamıyım. ancak burada çalışan bir çözümü uygulamak için yeterli kod var ... $ 'ı kaldırdım ve var .. muhtemelen hala c + değil
johnny craig

aslında vartamamen geçerli bir C # anahtar sözcüğü, bu yüzden iyisiniz
R0MANARMY
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.