迭代器

迭代器概念:

迭代器又称光标,是程序设计的软件设计模式。迭代器提供一个方法顺序访问一个聚合对象的各个元素,而不暴漏内部的标识。
在表象上看,在外部用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 @ 2024-10-23 16:44  请明月  阅读(5)  评论(0编辑  收藏  举报