Реализация метода 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
Какое простое объяснение мне не хватает?