为什么我在实现IEnumerator <T>的类中需要IEnumerator.Current?

con*_*att 7 .net c# ienumerator

我有一个实现的类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(); } }

}   
Run Code Online (Sandbox Code Playgroud)

除了IEnumerator<T>接口和IEnumerator接口(IEnumerator<T>继承)上都存在.Current属性之外,实现它的重点是什么?如上所述它甚至没有被称为.

Rex*_*x M 15

IEnumerator<T>实施IEnumerator,所以在最基本的层面上你必须履行合同.

特别是为什么 - 如果有人这样做会发生什么:

((IEnumerator)yourInstance).Current
Run Code Online (Sandbox Code Playgroud)

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

(仅供参考 - 返回this.Current也是一种很好的做法,因为它遵循DRY和SRP - 让当前的强类型版本处理Current实际上的实现细节.)