C#中foreach原理以及模拟的实现
本文实例讲述了C#中foreach原理以及模拟的实现方法,分享给大家供大家参考。具体如下:
public class Person:IEnumerable //定义一个person类 并且 实现IEnumerable 接口 (或者不用实现此接口 直接在类 //里面写个GetEnumerator()方法) { string[] names = { "小杨", "科比布莱恩特", "凯文杜兰特", "卡门安东尼" }; //在Person类里面定义一个字符串数组,以便用来模仿对象的索引访问public int Count { get { return names.Length; } } //可以通过对象访问此属性 public string this[int index] //定义一个索引器 { get { return names[index]; } }
public IEnumerator GetEnumerator() { return new MyClass(names); //实际上通过此方法就是返回一个可以实现循环的类的对象 // 用他的对象来移动索引 } }
public class MyClass :IEnumerator { public MyClass(string[] names) //一个参数的构造函数,用来和要遍历的类的进行关联 { name = names; } private string[] name; //用此字段来存放接收过来的数组 int index = -1; public object Current //获取当前索引的元素的值 { get { if (index<0) //准备状态是-1,开始循环了在MoveNext中加1 { return null; } else { return name[index]; } } } public bool MoveNext() { ++index; //每调用此方法就将索引往下+1 if (index<name.Length) { return true; } else { return false; } } public void Reset() { index=-1; } }
在主方法里面:
class Program { static void Main(string[] args) { Person p = new Person(); //for (int i = 0; i < p.Count; i++) //{ // Console.WriteLine(p[i]); //} foreach (string item in p) { Console.WriteLine(item); } //实际执行foreach就相当于执行下面几句话: Console.WriteLine("=================================================="); IEnumerator p1 = p.GetEnumerator(); while (p1.MoveNext()) { string str=(string)p1.Current; Console.WriteLine(str); } Console.ReadKey(); } }
希望本文所述对大家的C#程序设计有所帮助。