迭代器是用于在数组、列表等中检索元素并进行逐一迭代的方法。yield return语句与迭代器方法一起使用,返回集合中的元素,yieldbreak用于停止迭代。它始终存储当前位置并在下一次迭代发生时返回下一个元素。 IEnumerable 和 IEnumerator 对象值是yield 的返回类型。在本主题中,我们将学习 C# 中的迭代器。
下面的示例展示了使用循环、foreach 循环和枚举器等各种方法进行迭代。
示例:
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(); } } }
for 循环由三个语句组成。首先执行初始化,然后执行条件(布尔表达式)。之后执行迭代器来更改初始化变量的值。这个for循环过程一直持续到条件为假为止,当条件为假时,for循环终止。
输出:
示例:
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(); } } }
关键字内的 foreach 循环用于迭代项目。关键字用于在每次迭代中选择项目。第一项被迭代并存储在第二项之后的元素中,依此类推。 foreach 的迭代次数取决于集合中元素的数量。在此示例中,集合由三个值组成,因此 foreach 的次数将发生三次并显示值。
输出:
示例#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(); } } } }
在这个例子中,有一个包含五个元素的元素数组,并且使用 foreach 来迭代每个元素。 Yield 语句用于在每次迭代后返回元素。 IEnumerable 接口存储每个元素,而 foreach 用于显示迭代返回的元素。该迭代器在方法中使用。
输出:
示例#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(); } } } }
在这个例子中,使用了列表集合,并使用list.add方法在列表中添加元素。这里的列表由七个元素组成。 foreach 用于迭代每个元素。 Yield 语句用于在每次迭代后返回元素。 IEnumerable 接口用于存储每个元素,而 foreach 用于显示迭代返回的元素。
输出:
示例#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(); } } } }
在此示例中,生成斐波那契数列并在运算符中使用迭代器。其实现与我们在方法中使用迭代器相同,只是在此运算符中用于返回内容。
输出:
示例 #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(); } } } }
上面的例子中使用了列表集合。 List.add方法用于在列表中添加元素。这里的列表包含七个元素。使用 MoveNext 和 Current。 MoveNext 基本上是跟踪下一个元素是否存在并返回布尔值,如果该元素可用则返回 true,如果没有元素则返回 false,而 current 用于检索当前元素。
输出:
优点和缺点解释如下
因此,要遍历值序列,可以将迭代器与 foreach 语句结合使用。 Yield 可以与迭代器一起使用多次来返回元素。它很容易实现并且非常方便。
以上是C# 中的迭代器的详细内容。更多信息请关注PHP中文网其他相关文章!