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); }
運行結果如下
可以看出兩次輸出結果是一樣的。