Bagikan melalui


Iterator (Visual Basic)

Menentukan bahwa fungsi atau Get aksesor adalah iterator.

Komentar

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

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

Anda memanggil iterator dari kode klien dengan menggunakan Untuk Setiap... Pernyataan Berikutnya.

Jenis pengembalian fungsi iterator atau Get aksesor dapat berupa IEnumerable, , IEnumerable<T>IEnumerator, atau IEnumerator<T>.

Iterator tidak dapat memiliki parameter apa pun ByRef .

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

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 Yield pernyataan yang ada di dalam For... Perulangan berikutnya . Setiap iterasi isi pernyataan Untuk Setiap dalam Main membuat panggilan ke fungsi iterator Power . Setiap panggilan ke fungsi iterator melanjutkan ke eksekusi Yield pernyataan berikutnya, yang terjadi selama perulangan perulangan berikutnya For…Next .

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 Get aksesor 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