事実にもかかわらず、その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);
}
2回印刷True
する必要があることは明らかです。3
その代わりに結果は
True
3
False
0
私が見逃している簡単な説明はありますか?