Iterators are methods that iterate collections like lists, tuples, etc. Using an iterator method, we can loop through an object and return it's elements.
Create an Iterator Method
To create an iterator method, we use yield return
keyword to return the value.
The return type of the iterator method is either IEnumerable
, IEnumerable<T>
, IEnumerator
, or IEnumerator<T>
.
We can define an iterator method as:
returnType methodName()
{
yield return returnValue;
}
Here,
methodName()
- name of iterator methodreturnType
- return type of the methodreturnValue
- value returned by the method
Note: To learn more about yield return
, visit C# yield.
Example 1: Iterator Method
using System;
using System.Collections;
class Program
{
// define an iterator method
static IEnumerable getString()
{
yield return "Sunday";
yield return 2;
}
static void Main()
{
// display return values of getString()
foreach (var items in getString())
{
Console.WriteLine(items);
}
}
}
Output
Sunday 2
Here, getString()
is an iterator method that returns "Sunday"
and 2 using yield return
.
Example 2: Iterator Method with List
using System;
using System.Collections.Generic;
class Program
{
// define an iterator method
static IEnumerable<int> getList()
{
// create a list
List<int> myList = new List<int>();
// add elements to the list
myList.Add(1);
myList.Add(2);
myList.Add(4);
// iterate the elements of myList
foreach (var values in myList)
{
// return elements of myList which are divisible by 2
if (values % 2 == 0)
yield return values;
}
}
static void Main()
{
// display return values of getList()
foreach (var items in getList())
{
Console.WriteLine(items);
}
}
}
Output
2 4
Here, we have defined an iterator method named getList()
whose return type is IEnumerable<int>
.
Inside the getList()
method we have iterated through myList
using yield return
. Notice the code,
// iterate the elements of myList
foreach (var values in myList)
{
// return elements of myList which are divisible by 2
if (values % 2 == 0)
yield return values;
}
Here, yield return
preserves the location of the current code and the control goes back to the caller(i.e. inside foreach
of Main()
).
Inside the Main()
method, the foreach
loop prints the value returned by yield return
. Notice the code below,
// display return values of getList()
foreach (var items in getList())
{
Console.WriteLine(items);
}
Then foreach
calls the getList()
method again for the next iteration. Same process continues till every of myList
is iterated.
In way, we can do custom iteration over a collection like List<T>
in C#.