Страницы

Поиск по вопросам

пятница, 30 ноября 2018 г.

Где реализован IEnumerator?

У меня появился вопрос, который не дает мне покоя вот уже несколько часов. Для того, чтобы использовать foreach для кастомной коллекции, нужно реализовать метод интерфейса IEnumerable.
IEnumerator IEnumerable.GetEnumerator(){ return arr.GetEnumerator(); }
С этим все ясно. Но какой класс реализует интерфейс IEnumerator? По началу я думал System.Array, но после того, как я не увидел IEnumerator в списке родителей System.Array решил обратиться сюда.


Ответ

IEnumerator реализован типом, объект которого возвращает arr.GetEnumerator()
IEnumerator IEnumerable.GetEnumerator() { IEnumerator result = arr.GetEnumerator(); Console.WriteLine(result.GetType().FullName); return result; }
Тип возвращаемого объекта - System.Array.SZArrayEnumerator. Вот этот SZArrayEnumerator и реализует IEnumerator

Комментариев нет:

Отправить комментарий