В С# интерфейс IEnumerator определяет способ перемещения коллекции и просмотра элементов. Я думаю, что это чрезвычайно полезно, потому что если вы передадите метод IEnumerable<T> методу, он не будет изменять исходный источник.
Однако в Java Iterator определяет remove (необязательно!) позволяет удалять элементы. Нет никакого преимущества при передаче Iterable<T> методу, потому что этот метод все еще может изменять исходную коллекцию.
remove необязательность является примером отказался от завещания, но игнорируя это (уже обсуждалось здесь) Меня бы интересовали дизайнерские решения, в которых было предложено событие remove, которое должно быть реализовано на интерфейсе.
Каковы конструктивные решения, которые привели к добавлению remove к Iterator?
Иными словами, что такое конструкторское решение С#, которое явно не имеет remove, определенного на IEnumerator?