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

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”코드를 감싸는 것은 가독성이 떨어지는 것처럼 보인다. 특히 더 많은 코드가있을 때.



답변

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

    ' Do something
Next


답변

내가 사용하는 것 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루프를.


답변

이건 어떤가요:

If Not I = x Then

  ' Do something '

End If

' Move to next item '


답변

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

For Each I As Item In Items

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

    ' Do something
    Label1:
Next


답변

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를 사용하고 있습니다.


답변

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

적어도 “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


답변