迭代器

迭代器概念:

迭代器又称光标,是程序设计的软件设计模式。迭代器提供一个方法顺序访问一个聚合对象的各个元素,而不暴漏内部的标识。
在表象上看,在外部用foreach遍历对象而不需要了解其结构的,都是实现迭代器的。

标准迭代器的实现方法

关键接口:IEnumerator,IEnumerable。
命名空间:using System.Collections。
实现方式:同时继承IEnumerator和IEnumerable,实现其中的方法。

使用类实现迭代器

  1. 能用foreach遍历的类,必须提供IEnumerator对象,所以继承IEnumerable,实现IEnumerator GetEnumerator()方法。
  2. 继承IEnumerable接口,实现 bool MoveNext()和 Reset()方法,继承object Current对象
  3. forearch 本质
     1. 会先调用IEnumerator对象的 GetEnumerator() 获取IEnumerator对象。
     2. 执行得到IEnumerator对象的MoveNext(),相当于移动光标到下一位,只要MoveNext()返回值为true,就会得到 Crrent对象,让后赋值给Item。
     3. 后面就会重复MoveNext(),直到得到返回值为false,就循环结束。
     4. Reset(),会在1处初始化时,将重置光标位置。

代码实现:

		public class MyList : IEnumerable, IEnumerator
		{
		    private readonly int[] array;
		    private int index = -1;
		    public object Current => array[index];
		    public MyList()
		    {
		        array = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
		    }
		    public IEnumerator GetEnumerator()
		    {
		        Reset();//每次foreach 都会调用一次GetEnumerator 
		        return this;
		    }
		    public bool MoveNext()//移动光标
		    {
		        if (index >= array.Length-1)
		            return false;
		        index++;
		        return true;
		    }
		    public void Reset()
		    {
		        index = -1;//重置光标位置
		    }
		}
		public class Program
		{
		    private static void Main(string[] args)
		    {
		        MyList myList = new MyList();
		        foreach (var item in myList)
		        {
		            Console.WriteLine(item);
		        }
		        Console.ReadKey();
		    }
		}
posted @   请明月  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示