【问题标题】:IEnumerator.MoveNext() implementation?IEnumerator.MoveNext() 实现?
【发布时间】:2015-04-15 15:30:11
【问题描述】:

我是 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);
    }
}

我也签入了元数据,它没有提供任何实现。

那么为什么编译器没有抛出任何错误? MoveNext() 方法的实现在哪里 & 它如何移动到下一个值?

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

【问题讨论】:

  • 你打电话给list.GetEnumerator()。这将返回一个IEnumerator&lt;int&gt; 的实例。当你有它的实例时,为什么必须实现它? :)
  • 如果您拥有class myClass : IEnumerator&lt;int&gt;,那么它将迫使您“实施”下一步。但是你还没有声明你的类是IEnumerator&lt;int&gt;类型,你正在消费它。

标签: c# interface ienumerable


【解决方案1】:

原因是,你没有实现IEnumerator&lt;int&gt;,你使用了List&lt;int&gt;,它已经实现了它并为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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2011-09-10
    • 2012-10-19
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多