Iterator (Visual Basic)

Menentukan bahwa fungsi atau aksesor Get adalah iterator.

Keterangan

Iterator melakukan iterasi kustom pada koleksi. Iterator menggunakan pernyataan Yield untuk mengembalikan setiap elemen dalam koleksi satu per satu. Saat pernyataan Yield tercapai, lokasi saat ini dalam kode dipertahankan. Eksekusi dimulai ulang dari lokasi tersebut pada saat berikutnya ketika fungsi iterator tersebut dipanggil.

Iterator dapat diimplementasikan sebagai fungsi atau sebagai pengakses Get definisi properti. Pengubah Iterator muncul dalam deklarasi fungsi iterator atau aksesor Get.

Anda memanggil iterator dari kode klien dengan menggunakan pernyataan For Each…Next.

Jenis pengembalian funsi iterator atau pengakses Get dapat berupa IEnumerable, IEnumerable<T>, IEnumerator, atau IEnumerator<T>.

Iterator tidak dapat memiliki parameter ByRef apa pun.

Iterator tidak dapat terjadi dalam suatu peristiwa, konstruktor instans, konstruktor statik, atau destruktor statik.

Iterator bisa menjadi fungsi anonim. Untuk informasi selengkapnya, lihat Iterator.

Penggunaan

Pengubah Iterator dapat digunakan dalam konteks ini:

Contoh 1

Contoh berikut menunjukkan fungsi iterator. Fungsi iterator memiliki pernyataan Yield yang ada di dalam pengulangan For...Next. Setiap iterasi isi pernyataan For Each dalam Main membuat panggilan ke fungsi iterator Power. Setiap panggilan ke fungsi iterator berlanjut ke eksekusi pernyataan Yield berikutnya, yang terjadi selama iterasi pengulangan For…Next berikutnya.

Sub Main()
    For Each number In Power(2, 8)
        Console.Write(number & " ")
    Next
    ' Output: 2 4 8 16 32 64 128 256
    Console.ReadKey()
End Sub

Private Iterator Function Power(
ByVal base As Integer, ByVal highExponent As Integer) _
As System.Collections.Generic.IEnumerable(Of Integer)

    Dim result = 1

    For counter = 1 To highExponent
        result = result * base
        Yield result
    Next
End Function

Contoh 2

Contoh berikut menunjukkan aksesor Get yang merupakan iterator. Pengubah Iterator berada dalam deklarasi properti.

Sub Main()
    Dim theGalaxies As New Galaxies
    For Each theGalaxy In theGalaxies.NextGalaxy
        With theGalaxy
            Console.WriteLine(.Name & "  " & .MegaLightYears)
        End With
    Next
    Console.ReadKey()
End Sub

Public Class Galaxies
    Public ReadOnly Iterator Property NextGalaxy _
    As System.Collections.Generic.IEnumerable(Of Galaxy)
        Get
            Yield New Galaxy With {.Name = "Tadpole", .MegaLightYears = 400}
            Yield New Galaxy With {.Name = "Pinwheel", .MegaLightYears = 25}
            Yield New Galaxy With {.Name = "Milky Way", .MegaLightYears = 0}
            Yield New Galaxy With {.Name = "Andromeda", .MegaLightYears = 3}
        End Get
    End Property
End Class

Public Class Galaxy
    Public Property Name As String
    Public Property MegaLightYears As Integer
End Class

Untuk contoh tambahan, lihat Iterator.

Lihat juga