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.

Jawaban:



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.


4

Bagaimana dengan:

If Not I = x Then

  ' Do something '

End If

' Move to next item '

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

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.