首页 > 代码库 > 迭代器
迭代器
常见的迭代器模式有以下两种,我们可以创建迭代器来返回可枚举类型或枚举器。
下面演示如何使用迭代器创建可枚举类。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创建的枚举器。
迭代器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。