首页 > 代码库 > C#迭代器实现
C#迭代器实现
一、借助已经实现迭代的类来完成对某类的迭代器
一般情况下想通过foreach来枚举某一个类里包含的类容则必须实现枚举接口IEnumerable 然后重新写GetEnumerator方法。 创建的时候讲要加载的内容放进已经实现枚举的数组或类中,然后返回数组或此类中的GetEnumerator方法,这样比较简单。如下所示
class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); // TODO: Implement Functionality Here Class classs=new Class(); foreach(int item in classs) { Console.WriteLine(""+item); } Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } public class Class:IEnumerable { int[] myselfdata=http://www.mamicode.com/new int[]{1,2,3}; public Class() { } public IEnumerator GetEnumerator() { return myselfdata.GetEnumerator(); } }
二、利用yield关键字来实现迭代器,还可以实现自命名迭代器。
yield关键字用来向调用方的foreach结构返回指定值,达到yield return返回后会记录下当前位置,下次从当前位置返回,yield break会退出迭代。
class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); // TODO: Implement Functionality Here Class2 classs=new Class2(); //GetEnumerator 默认迭代器 foreach(int item in classs) { Console.WriteLine("默认迭代器GetEnumerator "+item); } //GetMyData 迭代器,自定义迭代器, 这里报错暂时没找到原因 // foreach(int item in classs.GetMyData(true)) // { // Console.WriteLine("自命名迭代器GetMyData "+item); // } //自定义命令迭代器也可直接用接口来实现 IEnumerator mydata= http://www.mamicode.com/classs.GetMyData(false); while(mydata.MoveNext()) { Console.WriteLine("自命名迭代器GetMyData "+mydata.Current); } Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } public class Class2:IEnumerable { int[] myselfdata=http://www.mamicode.com/new int[]{1,2,3}; public Class2() { } public IEnumerator GetEnumerator() { yield return myselfdata[0]; yield return myselfdata[1]; yield return myselfdata[2]; //或者 // foreach( int item in myselfdata) // { // yield return item; // } } public IEnumerator GetMyData( bool des) { if(des) { yield return myselfdata[0]; yield return myselfdata[1]; yield return myselfdata[2]; } else { yield return myselfdata[2]; yield return myselfdata[1]; yield return myselfdata[0]; } } }
C#迭代器实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。