深入理解 c# 第三章 泛型枚举 从0枚举到9

    class CountingEnumerableExample
    {
        class CountingEnumerable : IEnumerable<int>
        {
            public IEnumerator<int> GetEnumerator()
            {
                return new CountingEnumerator();
            }

            IEnumerator IEnumerable.GetEnumerator()
            {
                return GetEnumerator();
            }
        }

        class CountingEnumerator : IEnumerator<int>
        {
            int current = -1;

            public bool MoveNext()
            {
                current++;
                return current < 10;
            }

            public int Current
            {
                get { return current; }
            }

            object IEnumerator.Current
            {
                get { return Current; }
            }

            public void Reset()
            {
                throw new NotSupportedException();
            }

            public void Dispose()
            {
            }
        }

        static void Main()
        {
            CountingEnumerable counter = new CountingEnumerable();
            foreach (int x in counter)
            {
                Console.WriteLine(x);
            }
        }
    }


            public IEnumerator<int> GetEnumerator()
            {
                return new CountingEnumerator();
            }
隐式实现 IEnumerable<T>



IEnumerator IEnumerable.GetEnumerator()
            {
                return GetEnumerator();
            }

显式实现 IEnumerable  滴哦用了 IEnumerable<T> GetEnumerator()



public int Current
            {
                get { return current; }
            }

隐式实现IEnumerator<T>.Current




            object IEnumerator.Current
            {
                get { return Current; }
            }

显式实现 IEnumerator.Current 调用了 IEnumerator<T>.Current


            object IEnumerator.Current
            {
                get { return Current; }
            }

            CountingEnumerable counter = new CountingEnumerable();

证明可枚举类型能正常工作


实现泛型枚举必须经受的考验




输出

0
1
2
3
4
5
6
7
8
9

            object IEnumerator.Current
            {
                get { return Current; }
            }

版权声明:本文为eyetired原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。