Разница в реализации 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);
}
}
}