VB.NET - Bagaimana cara pindah ke item berikutnya a Untuk Setiap Loop?

93

Apakah ada statment seperti Exit For, kecuali keluar dari loop hanya berpindah ke item berikutnya.

Sebagai contoh:

For Each I As Item In Items

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

    ' Do something

Next

Saya tahu cukup menambahkan Elseke pernyataan If sehingga akan terbaca sebagai berikut:

For Each I As Item In Items

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

Next

Hanya ingin tahu apakah ada cara untuk melompat ke item berikutnya dalam Itemsdaftar. Saya yakin sebagian besar akan benar bertanya mengapa tidak hanya menggunakan Elsepernyataan, tetapi bagi saya membungkus kode "Lakukan Sesuatu" tampaknya kurang terbaca. Apalagi jika ada lebih banyak kode.

Sean Taylor
sumber

Jawaban:

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

    ' Do something
Next
Adam Robinson
sumber
Terima kasih, inilah yang saya cari, lucu bagaimana tidak ada dalam dokumentasi MSDN ?? ( msdn.microsoft.com/en-us/library/5ebk1751.aspx ) Juga selamat karena telah mengalahkan Jon hingga pos ini, dengan 20 detik penuh! :)
Sean Taylor
9
Aku hampir mendapatkan Skeeted sekali lagi! ;)
Adam Robinson
Anda sebaiknya menutup Ifpernyataan itu dengan benar. Itu menyesatkan.
mchar
48

Saya akan menggunakan Continuepernyataan itu sebagai gantinya:

For Each I As Item In Items

    If I = x Then
        Continue For
    End If

    ' Do something

Next

Perhatikan bahwa ini sedikit berbeda dengan memindahkan iterator itu sendiri - apa pun sebelum iterator Ifakan dijalankan lagi. Biasanya ini yang Anda inginkan, tetapi jika tidak, Anda harus menggunakan GetEnumerator()dan kemudian MoveNext()/ Currentsecara eksplisit daripada menggunakan For Eachloop.

Jon Skeet
sumber
4

Bagaimana dengan:

If Not I = x Then

  ' Do something '

End If

' Move to next item '
timo2oo8
sumber
1

Saya ingin menjelaskan bahwa kode berikut bukanlah praktik yang baik. Anda dapat menggunakan Label GOTO:

For Each I As Item In Items

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

    ' Do something
    Label1:
Next
Syed Tayyab Ali
sumber
23
Bisa, tapi tolong jangan.
MiseryIndex
Karena melompat, maka itu buruk.
Syed Tayyab Ali
4
Jika ini bukan praktik yang baik, dan ada solusi yang jelas lebih baik yang didukung oleh bahasa (Lanjutkan Untuk / Lanjutkan Berikutnya), mungkin jawaban ini harus dihapus secara sukarela.
eniacAvenger
Stackoverflow memungkinkan banyak jawaban untuk tujuan menjelajahi berbagai opsi yang tersedia. Saya setuju ini adalah pilihan yang buruk, tetapi ini adalah pilihan. Jadi saya pikir itu layak dimasukkan untuk kelengkapan.
Jeff
0

Ketika saya mencobanya Continue ForGagal, saya mendapat kesalahan kompiler. Saat melakukan ini, saya menemukan 'Resume':

For Each I As Item In Items

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

    'Do something

Next

Catatan: Saya menggunakan VBA di sini.

Karmendra
sumber
2
Kode ini bahkan tidak berfungsi di VBA. Resume Nextadalah untuk penanganan kesalahan yang tidak terstruktur.
Daniel
Anda harus menggunakan pernyataan IF yang besar untuk membungkus seluruh akhir loop di VBA karena tidak ada pernyataan lanjutkan. JadiIf I <> x Then
HackSlash
0

Hanya "Continue For" yang merupakan standar yang dapat diterima (sisanya mengarah ke "kode spaghetti").

Setidaknya dengan "lanjutkan untuk" programmer tahu kode tersebut langsung menuju ke atas loop.

Untuk puritan sekalipun, sesuatu seperti ini adalah yang terbaik karena ini murni kode "non-spaghetti".

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

Untuk kemudahan pengkodean, "Continue For" tidak apa-apa. (Ide bagus untuk berkomentar).

Menggunakan "Lanjutkan Untuk"

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
Chris Raisin
sumber