Разница в реализации GetEnumerator() - C#

Узнай цену своей работы

Формулировка задачи:

Объясните, плз, разницу в реализации GetEnumerator() в коде. Не могу понять почему так, а, к примеру, не наоборот.
        public IEnumerator<T> GetEnumerator()
        {
              return ((IEnumerable<T>) elements).GetEnumerator();
        }
 
        IEnumerator IEnumerable.GetEnumerator()
        {
           return (this as IEnumerable<T>).GetEnumerator();
        }
Полный код под спойлером:
class UserCollection<T> : ICollection<T>
    {
        T[] elements = new T[0];
 
        public void Add(T item)
        {
            var newArray = new T[elements.Length + 1];
            elements.CopyTo(newArray, 0);
            newArray[newArray.Length - 1] = item;
            elements = newArray;
        }
 
        public void Clear()
        {
            elements = new T[0];
        }
 
        public bool Contains(T item)
        {
            foreach (var element in elements)
            {
                if (element.Equals(item))
                    return true;
            }
 
            return false; 
        }
 
        public void CopyTo(T[] array, int arrayIndex)
        {
            elements.CopyTo(array, arrayIndex);
        }
 
        public int Count
        {
            get { return elements.Length; }
        }
 
        public bool IsReadOnly
        {
            get { return false; }
        }
 
        public bool Remove(T item)
        {
            throw new NotImplementedException();
        }
 
        public IEnumerator<T> GetEnumerator()
        {
              return ((IEnumerable<T>) elements).GetEnumerator();
        }
 
        IEnumerator IEnumerable.GetEnumerator()
        {
           return (this as IEnumerable<T>).GetEnumerator();
        }

Решение задачи: «Разница в реализации GetEnumerator()»

textual
Листинг программы
public class MyEnumerator
    {
        private bool move = false;
        public bool MoveNext()
        {
            return move = !move;
        }
 
        public int Current
        {
            get
            {
                return 15;
            }
        }
    }
 
    class Test
    {
        public MyEnumerator GetEnumerator()
        {
            return new MyEnumerator();
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            var test = new Test();
            foreach (var v in test)
            {
                Console.WriteLine(v);
            }
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.429 из 5
Похожие ответы