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

221
23 сентября 2018, 18:30

У меня появился вопрос, который не дает мне покоя вот уже несколько часов. Для того, чтобы использовать foreach для кастомной коллекции, нужно реализовать метод интерфейса IEnumerable.

IEnumerator IEnumerable.GetEnumerator(){
        return arr.GetEnumerator();
    }

С этим все ясно. Но какой класс реализует интерфейс IEnumerator? По началу я думал System.Array, но после того, как я не увидел IEnumerator в списке родителей System.Array решил обратиться сюда.

Answer 1

IEnumerator реализован типом, объект которого возвращает arr.GetEnumerator().

IEnumerator IEnumerable.GetEnumerator()
{
  IEnumerator result = arr.GetEnumerator();
  Console.WriteLine(result.GetType().FullName);
  return result;
}

Тип возвращаемого объекта - System.Array.SZArrayEnumerator. Вот этот SZArrayEnumerator и реализует IEnumerator.

READ ALSO
Ошибка при добавлении товаров в бд

Ошибка при добавлении товаров в бд

Есть база данных, в ней 2 таблицы (category_sklad состоящая из id и nameproducts_sklad состоящая из id name kolvo category_id)

225
Брать данные JSON из URL

Брать данные JSON из URL

Есть кусок кода, ну никак не хочет работать, ничего не выводит

189
Как удалить элементы из строки

Как удалить элементы из строки

Есть строка, в ней есть теги вида:

208
Проверка переменной на валидность PHP

Проверка переменной на валидность PHP

Есть динамическая переменная $password в которой храниться генерируемый пароль допустим:

203