IEnumerable接口的实现

对象要实现可以迭代需IEnumerable接口并实现GetEnumerator方法。一下简单例子

    public class SPEnumerable<T> : IEnumerable
    {
        private T[] array;

        public SPEnumerable()
        {
            array = new T[0];
        }

        public void Add(T item)
        {
            Array.Resize<T>(ref array, array.Length + 1);
            array[array.Length - 1] = item;
        }

        #region IEnumerable 成员

        IEnumerator IEnumerable.GetEnumerator()
        {
            foreach (T item in array)
            {
                yield return item;
            }
        }

        #endregion
    }

当然也可以自己去实现IEnumerator接口

    public class SPEnumerable<T> : IEnumerable
    {
        private T[] array;

        public SPEnumerable()
        {
            array = new T[0];
        }

        public void Add(T item)
        {
            Array.Resize<T>(ref array, array.Length + 1);
            array[array.Length - 1] = item;
        }

        #region IEnumerable 成员

        IEnumerator IEnumerable.GetEnumerator()
        {
            return new SPEnumerator<T>(array);
        }

        #endregion
    }

    public class SPEnumerator<T> : IEnumerator
    {
        private int position = -1;
        private T[] array;

        public SPEnumerator(T[] array)
        {
            this.array = array;
        }

        #region IEnumerator 成员

        public object Current
        {
            get 
            { 
                return array[position];
            }
        }

        public bool MoveNext()
        {
            position++;
            return position < array.Length;
        }

        public void Reset()
        {
            position = -1;
        }

        #endregion
    }
原文地址:https://www.cnblogs.com/xingbinggong/p/3598963.html