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)