programing

VB.NET - 각 루프에 대해 다음 항목 a로 이동하는 방법?

topblog 2023. 5. 28. 19:53
반응형

VB.NET - 각 루프에 대해 다음 항목 a로 이동하는 방법?

다음과 같은 진술이 있습니까?Exit For루프를 벗어나는 대신 다음 항목으로 이동합니다.

예:

For Each I As Item In Items

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

    ' Do something

Next

나는 간단히 추가할 수 있다는 것을 압니다.ElseIf 문에 다음과 같이 표시됩니다.

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 '

내가 노력했을때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를 사용합니다.

다음 코드가 좋은 관행이 아니라는 것을 분명히 하고 싶습니다.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"를 사용하면 프로그래머는 코드가 루프의 맨 위로 직접 이동한다는 것을 알 수 있습니다.

하지만 순수주의자들에게는 이것이 순수한 "스파게티가 아닌" 코드이기 때문에 이와 같은 것이 가장 좋습니다.

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

코딩의 용이성을 위해 "Continue For"(계속)는 괜찮습니다. (하지만 주석을 다는 것은 좋은 생각입니다.)

"계속" 사용

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

언급URL : https://stackoverflow.com/questions/829689/vb-net-how-to-move-to-next-item-a-for-each-loop

반응형