Оба должны возвращать одинаковые данные, да.
IEnumerator
взято из .Net v1.1, до того, как была введена общая типизация.IEnumerator<T>
- это версия общего типа, добавленная в .Net v2.
«Старая» версия IEnumerator
сохранена для совместимости, поэтому теперь IList<T>
реализует оба.
Разница между ними заключается в том, что неуниверсальный IEnumerator
возвращает объект, тогда как универсальный IEnumerator<T>
возвращает T.Несмотря на то, что компилятор c # вставит приведение для вас, чтобы не-универсальный IEnumerator
казался строго типизированным при использовании в foreach.
Наличие аргумента универсального типадостаточно, чтобы компилятор различал два интерфейса, но для того, чтобы класс реализовал оба интерфейса, он должен быть явно реализован.