Implementacja metody List <T> .Enumerator IEnumerator.Reset ()

Pomimo tego, żeIEnumerator.Reset nigdy nie należy stosować metody Znalazłem dziwne zachowanie podczas implementacji metodyList<T>.

Bez względu na to, jak będziesz badać kod źródłowy .NET Framework (wypróbowany ze źródłem odniesienia i ILSpy), metoda jest implementowana w następujący sposób:

void System.Collections.IEnumerator.Reset() {
    if (version != list._version) {
        ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EnumFailedVersion);
    }

    index = 0;
    current = default(T);
}

Wygląda jednak na to, że metoda nigdy nie jest wywoływana! Rozważ kod:

var list = new List<int>(1) { 3 };
using (var e = list.GetEnumerator())
{
    Console.WriteLine(e.MoveNext());
    Console.WriteLine(e.Current);

    ((IEnumerator)e).Reset();

    Console.WriteLine(e.MoveNext());
    Console.WriteLine(e.Current);
}

Jest całkiem jasne, że powinien wydrukowaćTrue i3 dwa razy. Zamiast tego wynik jest

True
3
False
0

Jakieś proste wyjaśnienie, którego mi brakuje?

questionAnswers(1)

yourAnswerToTheQuestion