0
点赞
收藏
分享

微信扫一扫

C#迭代器

花海书香 2022-03-11 阅读 31

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
1.迭代器方法

可以使用foreach循环语句进行的迭代的方法,称为可迭代方法,或者迭代器方法。

迭代器用法法介绍。

迭代器用于依次返回每个元素,一般用于foreach循环语句。迭代器方法需要使用yield return语句。

yield return 语句介绍

保持代码的当前位置,在下一次调用迭代器方法时执行。

迭代方法在使用过程中左右步骤对应。yield return语句主要是返回一个结果作为函数调用的结果。并记录当前运行位置,当下次函数被调用时,在当前位置执行这个函数。在迭代块中除了yield return外,不允许出现普通的return语句。

迭代方法使用的命名空间为using System.Collections.Generic;

下面代码为迭代器使用的具体代码

?

| 123456789101112131415161718192021222324 | class Program``{``public static IEnumerable<``int``> Fibs()``{``int f1 = 1, f2 = 2;``while (``true``)``{``yield return f1;``yield return f2;``f1 += f2;``f2 += f1;``}``}``static void Main(``string``[] args)``{``foreach (``int i in Fibs())``if (i < 20)``Console.WriteLine(``"{0}"``, i); else``break``;``Console.ReadKey();``} } |

IEnumerable是泛型定义的里面的int关系到你迭代对象yield return返回值的类型。如果你定义IEnumerable那么你返回的值是int类型,如果你定义IEnumerable那么你的返回值是string类型以此类推。如果你想以某个条件结束方法。可以使用外面的条件如上图所示。也可以使用yield break。

?

| 123456789101112131415161718192021222324 | class Program``{``public static IEnumerable Fibs()``{``string f1 = "1"``, f2 = "2"``;``while (``true``)``{``yield return f1;``yield return f2;``f1 += f2;``f2 += f1;``if (f1.Length > 8)``yield break``;``}``} static void Main(``string``[] args)``{``foreach (``string i in Fibs()) Console.WriteLine(``"{0}"``, i);``Console.ReadKey();``} } |

2.手动实现迭代器方法

首先是通过使用接口IEnumerable的方式,然后编写IEnumerator GetEnumerator()的方式。在代码中控制索引位置,和循环次数。如果索引位置出错则使用代码throw new NotImplementedException()报错。

?

| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | using System;``using System.Collections;``using System.Collections.Generic;  namespace test02``{``class Program``{``static void Main(``string``[] args)``{``object [] e = new object``[5] { 1, 2, 3, 4, 5 };``Itear01 s = new Itear01(e,2);``foreach (``object i in s)``Console.WriteLine(``"{0}"``, i);``Console.ReadKey();``} } public class Itear01 : IEnumerable``{``object``[] values;``int StartPoint=-1;``int current=0;``public Itear01(``object``[] values,``int StartPoint)``{``this``.values = values;``this``.StartPoint = StartPoint;``}``public IEnumerator GetEnumerator()``{``if``(``this``.StartPoint==-1)``throw new NotImplementedException();``while``(``true``)``{``yield return this``.values[StartPoint];``StartPoint = (StartPoint + 1) % values.Length;``current++;``if (current == values.Length)``{``break``;``}``} }``}``} |

举报

相关推荐

0 条评论