Реализация метода List <T> .Enumerator IEnumerator.Reset ()

Несмотря на то, чтоIEnumerator.Reset метод никогда не должен использоваться Я обнаружил странное поведение реализации метода внутриList<T>.

Независимо от того, как вы изучаете исходный код .NET Framework (пробовал с использованием ссылочного источника и ILSpy), метод реализован следующим образом:

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

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

Тем не менее, похоже, что метод никогда не вызывается вообще! Рассмотрим код:

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

Это довольно ясно, что это должно напечататьTrue а также3 дважды. Вместо этого результат

True
3
False
0

Какое простое объяснение мне не хватает?

Ответы на вопрос(1)

Ваш ответ на вопрос