IEnumerableインタフェースの実装

5151 ワード

オブジェクトを実装するには、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

    }