class _4_Iterator { [Test] public void Test1() { Apple obj = new Apple(); foreach (var item in obj) Console.WriteLine(item); } [Test] public void Test2() { Pear obj = new Pear(); foreach (var item in obj) Console.WriteLine(item); Console.WriteLine(111); } public void Test3() { List<int> list = new List<int>(); } } class Apple : IEnumerable { IList<int> _list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 }; public IEnumerator GetEnumerator() { //return _list.GetEnumerator(); for (int i = 0; i < _list.Count; i++) yield return _list[i]; } } class Pear { IList<int> _list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 }; //public IEnumerator GetEnumerator() //{ // //return new AppleEnumerator(_list); // for (int i = 0; i < _list.Count; i++) // yield return _list[i]; //} public IEnumerator GetEnumerator() { return new AppleEnumerator(_list); } } class AppleEnumerator : IEnumerator { IList<int> _list; int current =-1; public AppleEnumerator(IList<int> list) { _list = list; } public object Current { get { return _list[current]; } } public bool MoveNext() { if (current!= _list.Count) { current++; } return current<_list.Count; } public void Reset() { current = -1; } }