.NET基础之迭代器
2018-06-18 03:05:19来源:未知 阅读 ()
使用foreach循环是有IEnumerator接口来实现的,IEnumerator即实现了迭代器,在foreach中如何迭代一个集合arrayList呢?
- 调用arrayLis.GetEnumberator(),返回一个IEnumberator引用。
- 调用所返回的Enumberator接口的MoveNext()方法。
- 如果MoveNext()返回true,就使用IEnumberator接口的Current属性获取对象的一个引用,用于foreach循环。
- 重复前面两步,知道MoveNext方法返回false为止,此时循环停止。
迭代器的实现例子:
class Program { public static void Main(string[] args) { foreach (string str in SimpleList()) { Console.WriteLine(str); } Console.ReadKey(); } public static IEnumerable SimpleList() { yield return "1"; yield return "2"; yield return "3"; } }
下面给个复杂一点的例子,用迭代器实现返回素数:
public static void Main(string[] args) { Primes primesFrom2TO1000 = new Primes(2, 1000); foreach (long i in primesFrom2TO1000) { Console.Write("{0}", i); } }
public class Primes { private long min; private long max; public Primes() : this(2, 200) { } public Primes(long minimum, long maximum) { if (minimum < 2) { min = 2; } else { min = minimum; } max = maximum; } public System.Collections.IEnumerator GetEnumerator()//返回类型为一个迭代器 { for (long possiblePrime = min; possiblePrime <= max; possiblePrime++) { bool isPrime = true; for (long possibleFactor = 2; possibleFactor <= (long)Math.Floor(Math.Sqrt(possiblePrime)); possibleFactor++) { long remainderAfterDivsion = possiblePrime % possibleFactor; if (remainderAfterDivsion == 0) { isPrime = false; break; } } if (isPrime) { yield return possiblePrime;//为素数,返回之 } } } }
结果为:
迭代器返回的类型有两种:IEnumberable和IEnumerator。
- 如果要迭代一个类,可使用GetEnumerator(),它的返回类型是IEnumerator。
- 如果要迭代一个类成员,例如一个方法,则使用IEnumerable。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:适配器模式---设计模式(12)
- 如何0基础学习C/C++? 2020-06-06
- 复习C++语法--基础篇 2020-05-27
- C++基础 学习笔记六:复合类型之数组 2020-04-25
- C++基础 学习笔记五:重载之运算符重载 2020-04-23
- C++基础 学习笔记四:重载之函数重载 2020-04-22
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash