내부 순환 에서 Continue 외부 순환 의 사용 에 대한 상세 한 설명 을 분석 합 니 다.
그리고 모든 표준 에 맞 는 아 이 템 을 찾 고 싶 습 니 다.
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 에 대해 모든 기준 을 만족 시 키 는 지 확인한다.