gpt4 book ai didi

c# - 为什么在实现 IEnumerator 的类中需要 IEnumerator.Current?

转载 作者:太空狗 更新时间:2023-10-29 19:55:12 26 4
gpt4 key购买 nike

我有一个实现 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别担心 :)

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com