когда я перехожу к определению List‹>, я вижу, что у него есть общедоступная структура Enumerator, которая реализует интерфейсы IEnumerator<T>
, IDisposable и IEnumerator.
IEnumerator должен принудительно реализовать Reset — помимо Current и MoveNext. Однако реализованы только Current и MoveNext. Как это может быть?
Где я могу найти Reset() для List‹>?
var list = new List<int>();
list.Add(23);
list.Add(44);
var Enumerator = list.GetEnumerator();
while (Enumerator.MoveNext())
{
Console.WriteLine(Enumerator.Current);
}
Enumerator.
И когда я пробую это в коде, нет Reset():
Хорошо - я пытался показать скриншот, но они не позволяют мне.
Но копирование выше кода не показывает Reset-Method после Точка-оператор (.) перечислителя.
Кто-нибудь знает и прольет свет на это?
Я вижу, что он вызывает сброс IEnumerator, который является частью mscorlib.
var list = new List<int>();
list.Add(23);
list.Add(44);
var Enumerator = list.GetEnumerator();
Enumerator.MoveNext();
Enumerator.MoveNext();
Console.WriteLine(Enumerator.Current);
((IEnumerator<int>)Enumerator).Reset();
Enumerator.MoveNext();
И все же, поскольку IEnumerator — это интерфейс, как он может вызывать код?
Reset() в IEnumerator должен быть просто определением, а реализация должна быть оставлена тому, кто использует интерфейс.
Но каким-то образом здесь фактическая функциональность обеспечивается только определение интерфейса, который должен быть реализован. Нигде я не вижу фактической реализации - и эту часть я не понимаю.