Сброс не вызывается foreach
.Просмотр вашего метода Main в Reflector подтверждает это.
Классы .NET, такие как ArrayList
, фактически возвращают новый экземпляр класса, который реализует IEnumerator.
Например, ArrayList
реализуетIEnumerable
, и его GetEnumerator
метод выглядит следующим образом:
public virtual IEnumerator GetEnumerator()
{
return new ArrayListEnumeratorSimple(this);
}
, поэтому не нужно беспокоиться о вызове Reset, поскольку каждый foreach использует новый экземпляр перечислителя.
Для полного примера, показывающего реализацию IEnumerable и отдельный класс, реализующий IEnumerator, вы можете посмотреть документацию для IEnumerable .