我有一个实现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/