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
}

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;

6
Saya menyarankan contoh kedua akan lebih baik ditulis ulang menjadibool found = callFunctionInFirstCodeSnipper(list); // do stuff
ICR


55

Anda dapat menghindari loop eksplisit dengan mengambil rute LINQ:

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

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.


7

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


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.


3

bagaimana tentang:

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

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


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");

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

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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.