Iterators are the method that is used to retrieve the elements and performs iteration one by one in arrays, list, etc. The yield return statement is used with the iterator method to return the element of the collection and yield break is used to stop the iteration. It always stores the current location and returns the next element when the next iteration takes place. IEnumerable and IEnumerator object values are the return type of yield. In this topic, we are going to learn about Iterators in C#.
Below are the examples to show iteration with various methods like the loop, foreach loop, and enumerators.
Example:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { static void Main(string[] args) { for (int i = 1; i <= 7; i++) { Console.WriteLine( i); } Console.WriteLine("Press Enter Key to Exit.."); Console.ReadLine(); } } }
A for loop consists of three statements. At first, initialization is executed and then condition which is a Boolean expression. After that iterator is executed to change the initialized variable’s value. This for loop process continues until the condition is false and when it is false, for loop terminates.
Output:
Example:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { static void Main(string[]args) { string[] values = new string[3] { "John", "Bob", "Eva" }; foreach (string name in values) { Console.WriteLine(name); } Console.WriteLine("Press Enter Key to Exit.."); Console.ReadLine(); } } }
A foreach loop along within the keyword is used to iterate items. The keyword is used to select the item on each iteration. The first item is iterated and stored in element after that second item and so on. The number of iteration of foreach is depended upon the number of elements in the collection. In this example, the collection consists of three values so the number of foreach will take place three times and display the values.
Output:
Example #1
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { public static IEnumerable<string> GetArray() { int[] array = new int[] { 12, 45, 56, 21, 4 }; // initializing array elements foreach (var element in array) // iterating array element { yield return element.ToString(); // returning elements } } public static void Main(string[]args) // main method { IEnumerable<string> elements = GetArray(); // storing array element foreach(var element in elements) { Console.WriteLine(element); Console.ReadKey(); } } } }
In this example, there is an array of the element which contains five elements and foreach is used for iteration of each element. The yield statement is used to return element after each iteration. IEnumerable interface is storing each element whereas foreach is used to display the elements return from the iteration. This iterator is used in a method.
Output:
Example #2
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { public static IEnumerable<string> GetList() { List<string> list = new List<string>(); list.Add("Sunday"); // adding elements to list list.Add("Monday"); list.Add("Tuesday"); list.Add("Wednesday"); list.Add("Thursday"); list.Add("Friday"); list.Add("Saturday"); foreach(var element in list) //iteration of list elements { yield return element; //returning elements after iteration } } public static void Main(string[]args) // main method { IEnumerable<string> elements = GetList(); // storing elements foreach(var element in elements) { Console.WriteLine(element); Console.ReadKey(); } } } }
In this example, list collection is used and list.add method is used for adding elements in the list. Here the list consists of seven elements. A foreach is used for iteration of each element. The yield statement is used to return element after each iteration. IEnumerable interface is storing each element whereas foreach is used to display the elements return from the iteration.
Output:
Example #3
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { public static void Main(string[] args) { foreach(var item in fib(6)) // iteration of elements { Console.WriteLine(item); } } public static IEnumerable<int> fib(int number) { int x = 0, y = 1; // yield return x; //yield return y; for (int i=0; i<=number; i++) { int temp = x; x = y; y = temp + y; yield return y; // returning the element Console.ReadKey(); } } } }
In this example, the Fibonacci series is generated and the iterator is used in an operator. The implementation of this same as we used iterators in a method except that in this operators is used to return things.
Output:
Example #4
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { static void Main() { List<int> list = new List<int>(); list.Add(10); // adding elements to list list.Add(20); list.Add(30); list.Add(40); list.Add(50); list.Add(60); list.Add(70); List<int>.Enumerator a = list.GetEnumerator(); Write(a); } static void Write(IEnumerator<int> a) { while (a.MoveNext()) { int value = a.Current; Console.WriteLine(value); Console.ReadKey(); } } } }
In the above example, list collection is used. List.add method is used to add elements in the list. Here list contains seven elements. MoveNext and Current are used. MoveNext is basically tracking if the next element is present or not and returns boolean which may be true if the element is available and false if there is no element whereas the current is used to retrieve the current element.
Output:
The advantages & disadvantages are explained below
So to traverse the sequence of values, iterators can be used with the foreach statement. Yield can be used multiple times with iterator to return the elements. It is easy to implement and quite handy.
The above is the detailed content of Iterators in C#. For more information, please follow other related articles on the PHP Chinese website!