我有一个实现IEnumerator<string>的类。见下文:

public class MyClass : IEnumerator<string>
{
    public bool MoveNext()
    {
        //....
    }

    //Implement other required methods....

   //Confusion lies below:
   public string Current { get { return this.CurrentLine; } }

   //Why do I need to implement IEnumerator.Current?!  In my tests, it's not even called    during my iteration
   object IEnumerator.Current { get { throw new NotImplementedException(); } }

}

除了.current属性同时存在于IEnumerator<T>接口(interface)和IEnumerator接口(interface)(IEnumerator<T>继承)上之外,实现它的目的是什么?如上所示,它甚至没有被调用。

最佳答案

IEnumerator<T>实现IEnumerator,因此在最基本的级别上您必须履行契约(Contract)。

具体说明原因-如果有人这样做,会发生什么情况:

((IEnumerator)yourInstance).Current

他们(通常)应该期望获得从IEnumerator<T>的实现返回的相同值/引用的松散类型副本。因此,在大多数情况下,只需返回this.Current而不必担心:)

(FYI-返回this.Current也是一种好习惯,因为它遵循DRY和SRP-让Current的强类型版本处理Current实际的实现细节。)

关于c# - 为什么在实现IEnumerator <T>的类中需要IEnumerator.Current?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5171986/

10-10 22:55