尽管如此,该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
我缺少任何简单的解释吗?