내부 순환 에서 Continue 외부 순환 의 사용 에 대한 상세 한 설명 을 분석 합 니 다.

때때로 순환 되 는 외부 순환 에서 Continue 작업 을 수행 하 기 를 원 합 니 다.예 를 들 어 일련의 기준 과 items 가 있다 고 가정 합 니 다.
그리고 모든 표준 에 맞 는 아 이 템 을 찾 고 싶 습 니 다.

match = null;
foreach(var item in items)
{
  foreach(var criterion in criteria)
  {
    if (!criterion.IsMetBy(item)) //
    {
        // item , continue
    }
  }
  match = item;
  break;
}
이 수 요 를 실현 할 수 있 는 방법 이 많 습 니 다.여기 에는 다음 과 같은 방법 이 있 습 니 다.
방법\#1(못 생 긴 goto):goto 문 구 를 사용 합 니 다.

match = null;
foreach(var item in items)
{
  foreach(var criterion in criteria)
  {
    if (!criterion.IsMetBy(item))
    {
      goto OUTERCONTINUE;
    }
  }
  match = item;
  break;

OUTERCONTINUE:

}

그 중의 한 기준 에 부합 되 지 않 으 면 goto OUTCONTINUE:다음 아 이 템 을 검사 합 니 다.방법\#2(우아,예쁘다):
포 함 된 순환 을 보면 기본적으로 내부 순환 을 자신의 방법 에 두 는 것 을 고려 할 수 있 습 니 다.

match = null;
foreach(var item in items)
{
  if (MeetsAllCriteria(item, critiera))
  {
    match = item;
    break;
  }
}
Meets AllCriteria 방법의 내 부 는 분명

foreach(var criterion in criteria)
  if (!criterion.IsMetBy(item))
    return false;
return true;
방법\#3,표지 판 사용:

match = null;
foreach(var item in items)
{
 foreach(var criterion in criteria)
 {
   HasMatch=true;
   if (!criterion.IsMetBy(item))
   {
     // No point in checking anything further; this is not
     // a match. We want to “continue” the outer loop. How?
    HasMatch=false;
    break;
   }
 }
 if(HasMatch) {
    match = item;
    break;
 }
}
방법\#4,Linq 를 사용 해 야 합 니 다.

var matches = from item in items
              where criteria.All(
                criterion=>criterion.IsMetBy(item))
              select item;
match = matches.FirstOrDefault();
items 에 있 는 모든 item 에 대해 모든 기준 을 만족 시 키 는 지 확인한다.

좋은 웹페이지 즐겨찾기