Bagaimana cara melompat keluar dari loop foreach di C #?

125

Bagaimana cara keluar dari foreachloop di C # jika salah satu elemen memenuhi persyaratan?

Sebagai contoh:

foreach(string s in sList){
      if(s.equals("ok")){
       //jump foreach loop and return true
     }
    //no item equals to "ok" then return false
}
Steven Zack
sumber
Lucu. Dengan Python Anda cukup melakukannya return "ok" in sList:- bukankah ada sesuatu yang sebanding di C #?
Tim Pietzcker
8
@ Tim Pietzcker: Tentu ada, lihat jawaban pemboros. Nyatanya, setelah terbiasa dengan Linq, banyak kode imperatif yang terlihat seperti gambar gua.
R0MANARMY

Jawaban:

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

return false;

Atau, jika Anda perlu melakukan beberapa hal lain setelah menemukan item tersebut:

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

// do stuff

return found;
mbillard.dll
sumber
6
Saya menyarankan contoh kedua akan lebih baik ditulis ulang menjadibool found = callFunctionInFirstCodeSnipper(list); // do stuff
ICR
83

Gunakan break;dan ini akan keluar dari loop foreach

Francis Gilbert
sumber
55

Anda dapat menghindari loop eksplisit dengan mengambil rute LINQ:

sList.Any(s => s.Equals("ok"))
pemboros
sumber
23
atau gunakan saja Contains("ok").
Graham Clark
7
@Graham Clark: Containsmenganggap Anda sedang mengulang ICollection<T>. Anyakan bekerja pada apa pun yang bertipe IEnumerable<T>, dan dalam kasus ini, pertanyaan tidak secara eksplisit menunjukkan jenis koleksi yang diiterasi (a Listadalah tebakan yang cukup adil).
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.
}

Harus melakukan trik. Pernyataan break hanya akan mengakhiri eksekusi loop, sedangkan pernyataan return jelas akan menghentikan seluruh fungsi. Menilai dari pertanyaan Anda, Anda mungkin ingin menggunakan jawaban benar; pernyataan.

Cody
sumber
7

Anda dapat menggunakan breakyang melompat keluar dari loop penutup terdekat, atau Anda bisa langsungreturn true

vrxacs
sumber
5

Gunakan pernyataan 'break'. Saya merasa lucu bahwa jawaban atas pertanyaan Anda secara harfiah ada pada pertanyaan Anda! Omong-omong, pencarian Google sederhana bisa memberi Anda jawabannya.

dynamichael
sumber
3

bagaimana tentang:

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

Itu seharusnya melakukan trik jika yang ingin Anda lakukan hanyalah memeriksa "ok" dan mengembalikan jawabannya ...

Dan Olesen
sumber
2

Ini bukan jawaban langsung atas pertanyaan Anda, tetapi ada cara yang jauh lebih mudah untuk melakukan apa yang Anda inginkan. Jika Anda menggunakan .NET 3.5 atau yang lebih baru, setidaknya. Ini disebut Enumerable.Contains

bool found = sList.Contains("ok");
Bisa Gencer
sumber
1
foreach(string s in sList)
{
    if(s.equals("ok"))
    {
             return true;
    }
}
return false;
harryovers
sumber
1

Entah kembali langsung dari loop:

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

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

Atau gunakan 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
}

Namun, dalam kasus Anda mungkin lebih baik melakukan sesuatu seperti ini:

if(sList.Contains("ok"))
{
    // at least one element is "ok"
}
else
{
   // no elements are "ok"
}
Graham Clark
sumber
-2
var ind=0;
foreach(string s in sList){
    if(s.equals("ok")){
        return true;
    }
    ind++;
}
if (ind==sList.length){
    return false;
}
johnny craig
sumber
Cukup yakin $bukan sintaks C # yang valid.
R0MANARMY
mungkin tidak, saya orang javascript / php. tetapi ada cukup kode di sini untuk menerapkan solusi yang berfungsi ... saya menghapus $ dan menambahkan var .. mungkin masih belum c +
johnny craig
sebenarnya varadalah kata kunci C # yang benar -benar valid, jadi Anda baik
R0MANARMY