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?