考慮文檔IEnumerator.Current:迭代器塊的編譯器實現不正確?
目前還拋出一個異常,如果對MoveNext的上一次調用返回 假的,這表明了集合的末尾
然而,這不符合迭代器發生塊。例如:
void Main()
{
using (var enumerator = GetCounter().GetEnumerator())
{
for (int i = 0; i < 10; i++)
{
enumerator.MoveNext();
Console.WriteLine (enumerator.Current);
}
}
}
static IEnumerable<int> GetCounter()
{
for (int count = 0; count < 3; count++)
{
yield return count;
}
}
只會打印8次2
,沒有異常拋出。看着compiler transformation,Current
只是一個字段支持的屬性,它總是返回字段的值,僅此而已。也許這是某種形式的優化?但是,這看起來像違反了合同。
哦,我錯過了!顯然它被改爲「未定義」。我想這回答我的問題,但我不能接受評論,所以請讓它成爲答案。 –
你可以回答你自己的問題。 –