public class Persons:IEnumerable { public Persons(string[] people) { this.people = people; } public string[] people { set; get; } public IEnumerator GetEnumerator() { return new PersonEnumable(people); } } public class PersonEnumable : IEnumerator { public PersonEnumable(string[] people) { this.people = people; } private string[] people { set; get; } private int index { set; get; } = -1; /// <summary> /// 当前对象 /// </summary> public object Current { get { if (index < 0 || index > people.Length-1) return null; else return people[index]; } } /// <summary> /// /// </summary> /// <returns></returns> public bool MoveNext() { if (index < people.Length-1) { index++; return true; } return false; } /// <summary> /// /// </summary> public void Reset() { index = -1; } }
var strArr = new string[] { "科比", "詹姆斯", "杜兰特", "诺维茨基", "东契奇", "卢比奥" }; var persons = new Persons(strArr); foreach (var t in persons) { Console.WriteLine(t); } //foreachq其实大概就是执行了这段代码,只是不知道是什么时候执行的Reset() PersonEnumable personEnumable = new PersonEnumable(strArr); while (personEnumable.MoveNext()) { Console.WriteLine(personEnumable.Current); }
运行结果如下
可以看出两次输出结果是一样的。