Làm thế nào để tôi nhảy ra khỏi vòng lặp foreach trong C #?


124

Làm cách nào để thoát ra khỏi foreachvòng lặp trong C # nếu một trong các phần tử đáp ứng yêu cầu?

Ví dụ:

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

Buồn cười. Trong Python bạn chỉ cần làm return "ok" in sList:- không có cái gì có thể so sánh được trong C #?
Tim Pietzcker

8
@Tim Pietzcker: Tất nhiên là có, hãy xem câu trả lời của người chi tiêu. Trong thực tế, sau khi làm quen với Linq, rất nhiều mã bắt buộc trông giống như bản vẽ hang động.
R0MANARMY

Câu trả lời:


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

return false;

Ngoài ra, nếu bạn cần làm một số việc khác sau khi bạn tìm thấy mục này:

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
Tôi muốn đề xuất ví dụ thứ hai sẽ được viết lại tốt hơnbool found = callFunctionInFirstCodeSnipper(list); // do stuff
ICR


55

Bạn có thể tránh các vòng lặp rõ ràng bằng cách chọn tuyến đường LINQ:

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

23
hoặc chỉ sử dụng Contains("ok").
Graham Clark

7
@Graham Clark: Containsgiả sử bạn đang lặp đi lặp lại một ICollection<T>. Anysẽ hoạt động trên bất cứ thứ gì thuộc loại IEnumerable<T>, và trong trường hợp này, câu hỏi không chỉ ra rõ ràng loại bộ sưu tập nào được lặp đi lặp lại ( Listmặc dù đó là một phỏng đoán khá công bằng).
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.
}

Nên làm thủ thuật. Câu lệnh break sẽ chỉ kết thúc việc thực hiện vòng lặp, trong khi câu lệnh return rõ ràng sẽ chấm dứt toàn bộ hàm. Đánh giá từ câu hỏi của bạn, bạn có thể muốn sử dụng trả về đúng sự thật; tuyên bố.


7

Bạn có thể sử dụng breakbước nhảy ra khỏi vòng lặp gần nhất hoặc bạn có thể trực tiếpreturn true


5

Sử dụng câu lệnh 'break'. Tôi thấy thật hài hước khi câu trả lời cho câu hỏi của bạn thực sự nằm trong câu hỏi của bạn! Nhân tiện, một tìm kiếm Google đơn giản có thể đã cho bạn câu trả lời.


3

làm thế nào về:

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

Điều đó sẽ thực hiện mẹo nếu tất cả những gì bạn muốn làm là kiểm tra "ok" và trả lời ...


2

Đây không phải là câu trả lời trực tiếp cho câu hỏi của bạn nhưng có một cách dễ dàng hơn nhiều để làm những gì bạn muốn. Nếu bạn đang sử dụng .NET 3.5 trở lên, ít nhất. Nó được gọi là Enumerable.Contains

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

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

1

Hoặc trả thẳng ra khỏi vòng lặp:

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

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

Hoặc sử dụng 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
}

Tuy nhiên, trong trường hợp của bạn, có thể tốt hơn để làm một cái gì đó như thế này:

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

Khá chắc chắn $không phải là cú pháp C # hợp lệ.
R0MANARMY

có lẽ là không, tôi là một anh chàng javascript / php. nhưng có đủ mã ở đây để áp dụng giải pháp làm việc ... tôi đã xóa $ và thêm var .. có lẽ vẫn không phải là c +
johnny craig

thực sự varlà một từ khóa C # hoàn toàn hợp lệ, vì vậy bạn rất tốt
R0MANARMY
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.