Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.