VB.NET-For Each 루프의 다음 항목으로 이동하는 방법?


93

Exit For루프를 종료하는 대신 다음 항목으로 이동하는 것을 제외하고 와 같은 문구가 있습니까?

예를 들면 :

For Each I As Item In Items

    If I = x Then 
        ' Move to next item
    End If

    ' Do something

Next

Else다음과 같이 읽을 수 있도록 If 문에 간단히 추가 할 수 있습니다.

For Each I As Item In Items

    If I = x Then 
        ' Move to next item
    Else
        ' Do something
    End If

Next

Items목록 의 다음 항목으로 이동하는 방법이 있는지 궁금 합니다. 나는 대부분의 사람들이 왜 그 Else문장을 사용하지 않는지에 대해 적절하게 물을 것이라고 확신 하지만, 나에게 "Do Something"코드를 감싸는 것은 가독성이 떨어지는 것처럼 보인다. 특히 더 많은 코드가있을 때.

답변:


178
For Each I As Item In Items
    If I = x Then Continue For

    ' Do something
Next

감사합니다 이것이 내가 찾던 것입니다. MSDN 문서에없는 것이 얼마나 재밌습니까 ?? ( msdn.microsoft.com/en-us/library/5ebk1751.aspx ) 또한 Jon을 전체 20 초로 이겼 음을 축하합니다! :)
Sean Taylor

9
나는 다시 한 번 Skeeted를 거의 얻었습니다! ;)
Adam Robinson

If진술을 제대로 닫는 것이 좋습니다 . 오해의 소지가 있습니다.
mchar

48

내가 사용하는 것 Continue대신에 문을 :

For Each I As Item In Items

    If I = x Then
        Continue For
    End If

    ' Do something

Next

이것은 반복자 자체를 이동하는 것과 약간 다릅니다. 이전의 모든 것이 If다시 실행됩니다. 보통 이것은 당신이 원하는,하지만하지 않으면 당신은 사용해야합니다 GetEnumerator()다음 MoveNext()/ Current명시 적으로보다는 사용하여 For Each루프를.


4

이건 어떤가요:

If Not I = x Then

  ' Do something '

End If

' Move to next item '

1

다음 코드는 좋은 습관이 아님을 분명히하고 싶습니다. GOTO 레이블을 사용할 수 있습니다.

For Each I As Item In Items

    If I = x Then
       'Move to next item
        GOTO Label1
    End If

    ' Do something
    Label1:
Next

23
당신은 할 수 있지만 제발하지 마십시오.
MiseryIndex

점프로 인해 나쁘다.
Syed Tayyab Ali

4
그것이 좋은 습관이 아니고 언어가 지원하는 분명히 더 나은 해결책이 있다면 (Continue For / Resume Next) 아마도이 대답은 자발적으로 제거되어야 할 것입니다.
eniacAvenger 2015 년

Stackoverflow는 사용 가능한 옵션의 범위를 탐색 할 목적으로 여러 답변을 허용합니다. 나는 이것이 나쁜 선택이라는 데 동의하지만 그것은 선택입니다. 그래서 완전성을 위해 포함시킬 가치가 있다고 생각합니다.
제프

0

Continue For실패를 시도했을 때 컴파일러 오류가 발생했습니다. 이 과정에서 '이력서'를 발견했습니다.

For Each I As Item In Items

    If I = x Then
       'Move to next item
       Resume Next
    End If

    'Do something

Next

참고 : 여기서 VBA를 사용하고 있습니다.


2
이 코드는 VBA에서도 작동하지 않습니다. Resume Next구조화되지 않은 오류 처리를위한 것입니다.
Daniel

continue 문이 없기 때문에 VBA에서 루프의 전체 끝을 래핑하려면 큰 IF 문을 사용해야합니다. 그래서If I <> x Then
HackSlash

0

"계속"만 허용되는 표준입니다 (나머지는 "스파게티 코드"로 이어짐).

적어도 "continue for"를 사용하면 프로그래머는 코드가 루프의 맨 위로 직접 이동한다는 것을 알고 있습니다.

그러나 순수 주의자들에게는 순수한 "비 스파게티"코드이기 때문에 이와 같은 것이 가장 좋습니다.

Dim bKeepGoing as Boolean 
For Each I As Item In Items
  bKeepGoing = True
  If I = x Then
    bKeepGoing = False
  End If
  if bKeepGoing then
    ' Do something
  endif
Next

코딩의 편의를 위해 "계속"은 괜찮습니다. (하지만 댓글을 남기는 것이 좋습니다).

"계속"사용

For Each I As Item In Items
  If I = x Then
    Continue For   'skip back directly to top of loop
  End If
  ' Do something
Next
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.