C #에서 foreach 루프에서 벗어나려면 어떻게해야합니까?


124

foreach요소 중 하나가 요구 사항을 충족하는 경우 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 2011-06-28

8
@Tim Pietzcker : 물론 있습니다, 지출 자의 답변을 참조하십시오. 사실 Linq에 익숙해지면 많은 명령형 코드가 동굴 그림처럼 보입니다.
R0MANARMY 2011-06-28

답변:


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
두 번째 예를 다시 작성하는 것이 좋습니다bool found = callFunctionInFirstCodeSnipper(list); // do stuff
ICR


55

LINQ 경로를 사용하여 명시 적 루프를 피할 수 있습니다.

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

23
또는 그냥 Contains("ok").
Graham Clark

7
@Graham 클라크 : Contains당신이 이상 반복하는거야 가정합니다 ICollection<T>. Any해당 유형의 아무것도 작동합니다 IEnumerable<T>,이 경우 질문에 명시 적으로 (a는 이상 반복 소장의 종류 무엇을 나타내지 않습니다 List꽤 공정한 추측하지만)입니다.
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.
}

트릭을해야합니다. break 문은 루프 실행을 끝내고 return 문은 분명히 전체 함수를 종료합니다. 귀하의 질문으로 판단하면 true 반환을 사용하고 싶을 수 있습니다. 성명서.


7

break가장 가까운 둘러싸는 루프에서 점프하는 것을 사용 하거나 직접return true


5

'break'문을 사용하세요. 귀하의 질문에 대한 답변이 말 그대로 귀하의 질문에 있다는 것이 유머러스합니다! 그건 그렇고, 간단한 Google 검색으로 답을 얻을 수 있습니다.


3

어때 :

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

당신이 원하는 것은 "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-06-28

아마 아니, 나는 자바 스크립트 / PHP 녀석입니다. 하지만 충분한 코드는 아마 아직 .. 나는 $ 및 추가 VAR을 제거 ... 작업 솔루션을 적용하기 위해 여기에 C +가없는
조니 크레이그

실제로 var완벽하게 유효한 C # 키워드이므로 좋습니다
R0MANARMY 2011-06-28
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.