VB.NET Iterator Example: Yield KeywordUse an Iterator Function. Specify the Yield keyword to return intermediate values.
An Iterator returns values when repeatedly called. This kind of function maintains its state between calls. We use the Yield keyword to return a value from an Iterator. Control then resumes next after the Yield.Keywords
This is an example Iterator. The ComputePower Function generates a series of numbers with an increasing exponent value. We pass, as arguments, two values—the base number and the highest exponent required.
While: In ComputePower we iterate through the exponents. We compute the running total and store it in the local variables.
Yield: With the Yield keyword we "yield" control of ComputePower to Main. When next called, we resume after Yield.
VB.NET program that uses Iterator, Yield
' Loop over first 10 exponents.
For Each value As Integer In ComputePower(2, 10)
Public Iterator Function ComputePower(
ByVal number As Integer,
ByVal exponent As Integer) As IEnumerable(Of Integer)
Dim exponentNum As Integer = 0
Dim numberResult As Integer = 1
' Yield all numbers with exponents up to the argument value.
While exponentNum < exponent
numberResult *= number
exponentNum += 1
In this language,
the Yield and Iterator keywords trigger code generation. Special classes are generated. In these classes, the state of Iterators are maintained. This is all invisible to programmers.
However: It is important to know these are not low-level features. They use keywords and short syntax, but much code is needed.
For performance, a simple For-loop or List is a better choice. Generate values, place into an array, and return. This avoids much of the excess classes that an Iterator will generate behind the scenes.For Each, ForListArray
Summary. The Iterator and Yield features in VB.NET are advanced. They appear simple, but complex code is generated behind the scenes. We often call Iterators within a For Each loop. Values can be returned based on any logic.
© 2007-2020 Sam Allen. Every person is special and unique. Send bug reports to firstname.lastname@example.org.