Listar a implementação do método <T> .Enumerator IEnumerator.Reset ()

Apesar do fato queIEnumerator.Reset método nunca deve ser usado Eu encontrei um comportamento estranho da implementação do método dentroList<T>.

Não importa como você examina o código-fonte do .NET Framework (tentei com a fonte de referência e o ILSpy), o método é implementado da seguinte forma:

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

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

No entanto, parece que o método nunca é chamado em tudo! Considere o código:

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);
}

Está bem claro que deve imprimirTrue e3 duas vezes. Em vez disso, o resultado é

True
3
False
0

Alguma explicação simples que eu estou perdendo?

questionAnswers(1)

yourAnswerToTheQuestion