首页 > 代码库 > 迭代器

迭代器

常见的迭代器模式有以下两种,我们可以创建迭代器来返回可枚举类型或枚举器。
下面演示如何使用迭代器创建可枚举类。print方法是一个迭代器块,可以为A类产生并返回枚举器的方法。A类还实现了getenumrator方法,他调用print并且返回print返回的枚举器。注意main方法,由于A类实现了getenumrator方法方法,是可枚举类型,我们在foreach语句中直接使用类的实例。
namespace ConsoleApplication1{    class A    {                string str_1="111";        string str_2 = "222";        string str_3 = "333";        public IEnumerator<string> GetEnumerator()        {return print();           //返回枚举器        }        public IEnumerator<string>print()//IEnumrator<string>的意思为--->返回枚举器                                           {            yield return str_1;            yield return str_2;            yield return str_3;        }    }    class Program    {        static void Main(string[] args)        {            A obj = new A();            foreach (string str in obj)                Console.WriteLine(str);            Console.Read();                    }    }}
技术分享
解析:print迭代器方法返回IEnumrator<string>,A类通过返回的由print返回的对象来实现GetEnumerator方法----->这句话很重要,上面代码的说明
当我们实现了返回枚举器的迭代器时,必须通过实现GetEnumerator来让类可枚举,他返回由迭代器返回的枚举器。
把类A改为如下,输出和上面同样的结果
class
A { string str_1 = "111"; string str_2 = "222"; string str_3 = "333"; public IEnumerator<string> GetEnumerator() { yield return str_1; yield return str_2; yield return str_3; } }
使用迭代器来创建可枚举类型
namespace
ConsoleApplication1{ class A { string str_1 = "111"; string str_2 = "222"; string str_3 = "333"; public IEnumerable<string> print()//IEnumerable<string>的意思为返回可枚举类型 { yield return str_1; yield return str_2; yield return str_3; } } class Program { static void Main(string[] args) { A obj = new A(); foreach (string str in obj.print())//注意这儿和上面不一样的,调用的是obj.print()而不是obj Console.WriteLine(str); Console.Read(); } }}
//输出结果和上面的一样。如果不实现GetEnumerator使类本身不可枚举,仍然可以使用由迭代器返回的可枚举器类,只需要直接调用迭代器方法。

 


namespace
ConsoleApplication1{ class A { string str_1 = "111"; string str_2 = "222"; string str_3 = "333"; public IEnumerator<string> GetEnumerator() { IEnumerable<string> myIEnumerable = print();//获取可枚举类型 return myIEnumerable.GetEnumerator();//获取枚举器 } public IEnumerable<string> print()//IEnumerable<string>的意思为返回可枚举类型 { yield return str_1; yield return str_2; yield return str_3; } } class Program { static void Main(string[] args) { A obj = new A(); foreach (string str in obj)//也可以写成foreach (string str in obj.print()),因为print它返回的是可枚举类型 Console.WriteLine(str); Console.Read(); } }}
如果实现了GetEnumerator,让它调用迭代器方法以获取自动生成的实现IEnumrable的类实例。然后从IEnumerable对象返回由GetEnumrator创建的枚举器。

 

 

 

迭代器