首页  >  文章  >  后端开发  >  C# 中的迭代器

C# 中的迭代器

王林
王林原创
2024-09-03 15:04:08566浏览

迭代器是用于在数组、列表等中检索元素并进行逐一迭代的方法。yield return语句与迭代器方法一起使用,返回集合中的元素,yieldbreak用于停止迭代。它始终存储当前位置并在下一次迭代发生时返回下一个元素。 IEnumerable 和 IEnumerator 对象值是yield 的返回类型。在本主题中,我们将学习 C# 中的迭代器。

C# 迭代器方法

下面的示例展示了使用循环、foreach 循环和枚举器等各种方法进行迭代。

1. 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)
{
for (int i = 1; i <= 7; i++)
{
Console.WriteLine( i);
}
Console.WriteLine("Press Enter Key to Exit..");
Console.ReadLine();
}
}
}

for 循环由三个语句组成。首先执行初始化,然后执行条件(布尔表达式)。之后执行迭代器来更改初始化变量的值。这个for循环过程一直持续到条件为假为止,当条件为假时,for循环终止。

输出:

C# 中的迭代器

2. 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)
{
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 的次数将发生三次并显示值。

输出:

C# 中的迭代器

3.枚举器

示例#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 用于显示迭代返回的元素。该迭代器在方法中使用。

输出:

C# 中的迭代器

示例#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 用于显示迭代返回的元素。

输出:

C# 中的迭代器

示例#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();
}
}
}
}

在此示例中,生成斐波那契数列并在运算符中使用迭代器。其实现与我们在方法中使用迭代器相同,只是在此运算符中用于返回内容。

输出:

C# 中的迭代器

示例 #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 用于检索当前元素。

输出:

C# 中的迭代器

迭代器的优点和缺点

优点和缺点解释如下

优点

  1. 迭代器可以用作方法和 get 访问器。
  2. 它可以用作运算符或属性。
  3. 迭代器易于阅读且易于实现。
  4. 迭代器与泛型和非泛型集合一起使用。

缺点

  1. 迭代器在列表的回溯中没有用处。
  2. 由于迭代器存储位置,因此您无法更新迭代结构。
  3. 静态构造函数、静态终结器和实例构造函数中不使用迭代器。

结论

因此,要遍历值序列,可以将迭代器与 foreach 语句结合使用。 Yield 可以与迭代器一起使用多次来返回元素。它很容易实现并且非常方便。

以上是C# 中的迭代器的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:nhibernate in C#下一篇:Objects in C#