VB.NET - Her Döngü İçin bir sonraki öğeye nasıl geçilir?


94

Döngüden Exit Forçıkmak yerine sadece bir sonraki öğeye geçmesi dışında, gibi bir ifade var mı ?

Örneğin:

For Each I As Item In Items

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

    ' Do something

Next

ElseAşağıdaki gibi okunabilmesi için If ifadesine basitçe bir ekleyebileceğini biliyorum :

For Each I As Item In Items

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

Next

ItemsListedeki bir sonraki öğeye atlamanın bir yolu olup olmadığını merak ediyorum . Eminim çoğu kişi neden sadece Elseifadeyi kullanmayacağını doğru bir şekilde soracaktır , ama bana göre "Bir Şey Yapın" kodunu sarmak daha az okunabilir görünüyor. Özellikle çok daha fazla kod olduğunda.

Yanıtlar:



48

Bunun Continueyerine ifadeyi kullanırım:

For Each I As Item In Items

    If I = x Then
        Continue For
    End If

    ' Do something

Next

Bunun yineleyicinin kendisini hareket ettirmekten biraz farklı olduğuna dikkat edin - önceki her şey Ifyeniden yürütülecektir. Genellikle istediğiniz budur, ancak istemezseniz kullanmanız gerekecekGetEnumerator() bir döngü kullanmak yerine ve sonra MoveNext()/ Currentaçıkça kullanmanız gerekir For Each.


4

Ne dersin:

If Not I = x Then

  ' Do something '

End If

' Move to next item '

1

Aşağıdaki kodun iyi bir uygulama olmadığı konusunda net olmak istiyorum. GOTO Etiketini kullanabilirsiniz:

For Each I As Item In Items

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

    ' Do something
    Label1:
Next

24
Yapabilirsin, ama lütfen yapma.
MiseryIndex

Atlama nedeniyle, bu nedenle kötü.
Syed Tayyab Ali

4
İyi bir uygulama değilse ve dilin desteklediği açıkça daha iyi bir çözüm varsa (Devam Et / Sonra Devam Et), belki bu yanıt gönüllü olarak kaldırılmalıdır.
eniacAvenger

Stackoverflow, mevcut seçenek yelpazesini keşfetmek amacıyla birden fazla yanıta izin verir. Bunun kötü bir seçenek olduğuna katılıyorum, ama bu bir seçenek. Bu yüzden bütünlük için dahil edilmeye değer olduğunu düşünüyorum.
Jeff

0

Continue ForBaşarısız denediğimde bir derleyici hatası aldım. Bunu yaparken 'Devam Et'i keşfettim:

For Each I As Item In Items

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

    'Do something

Next

Not: Burada VBA kullanıyorum.


2
Bu kod VBA'da bile çalışmıyor. Resume Nextyapılandırılmamış hata işleme içindir.
Daniel

Devam ifadesi olmadığı için VBA'da döngünün tüm sonunu sarmak için büyük bir IF ifadesi kullanmanız gerekir. SoIf I <> x Then
HackSlash

0

Yalnızca "Devam Et" kabul edilebilir bir standarttır (geri kalanı "spagetti koduna" yol açar).

En azından "devam et" ile programcı kodun doğrudan döngünün en üstüne gittiğini bilir.

Püristler için ise, bunun gibi bir şey en iyisidir çünkü saf "spagetti olmayan" koddur.

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

Yine de kodlama kolaylığı için, "Devam Et" sorun değil. (Yine de yorumlamak iyi bir fikir).

"Devam Et" seçeneğini kullanma

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.