ITERATORS
One of the benefits of collection classes is that they allow you to use a For Each loop to iterate through the items they contain. Visual Basic lets you write your own iterator function to provide access to items in a group. Then other code can loop over those items by using a For Each loop.
To make an iterator, create a function that uses the keyword Iterator before its Function keyword. Then make the function return the type IEnumerable or a generic version of IEnumerable such as IEnumerable(Of String). Finally, inside the function, use the Yield statement to return a value in the enumeration.
For example, the following function enumerates a list of prime numbers:
Private Iterator Function Primes(
start_number As Integer, end_number As Integer) As IEnumerable(Of Integer)
' Define an inline function that returns True if a number is prime.
Dim is_prime = Function(i)
If i = 1 Then Return False ' 1 is not prime.
If i = 2 Then Return True ' 2 is prime.
If i Mod 2 = 0 Then Return False ' Other even numbers are not prime.
For test As Integer = 3 To Math.Sqr(i) Step 2
If i Mod test = 0 Then Return False
Next test
Return True
End Function
For i As Integer = start_number To end_number
' If this number is prime, enumerate it.
If is_prime(i) Then Yield i
Next i
End Function
The following code shows how a program might use the Primes iterator:
For Each prime As Integer In Primes(1, 1000)
Debug.WriteLine(prime)
Next prime
Debug.WriteLine("# Primes: " & Primes(1, 1000).Count)
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access