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实际上的实现细节.)
| 归档时间: |
|
| 查看次数: |
2221 次 |
| 最近记录: |