IEnumerator.MoveNext()实现?

时间:2015-04-15 15:30:11

标签: c# interface ienumerable

我不熟悉c#我知道必须实现接口中定义的方法

但是在下面的代码中我还没有实现MoveNext()方法

static void Main()
{
    List<int> list = new List<int>();
    list.Add(1);
    list.Add(5);
    list.Add(9);

    List<int>.Enumerator e = list.GetEnumerator();
    Write(e);
}

static void Write(IEnumerator<int> e)
{
    while (e.MoveNext())
    {
        int value = e.Current;
        Console.WriteLine(value);
    }
}

我也检查了元数据,&amp;它没有提供任何实现。

那么为什么编译器不会抛出任何错误? MoveNext()方法的实现在哪里&amp; 它如何转向下一个价值?

是否由编译器自动生成MoveNext()方法的代码? 请帮忙

1 个答案:

答案 0 :(得分:6)

原因是,您没有实施IEnumerator<int>,您使用了已实现它的List<int>并为MoveNext提供了实施。

以下是actual implementation,代码为:

public bool MoveNext() {

    List<T> localList = list;

    if (version == localList._version && ((uint)index < (uint)localList._size)) 
    {                                                     
        current = localList._items[index];                    
        index++;
        return true;
    }
    return MoveNextRare();
}