为什么.NET没有双向枚举器?

JSB*_*ոգչ 10 .net c# ienumerator enumerators

关于如何实现双向枚举器(这里,这里)的问题已被问过几次.我的问题不是如何(对于大多数情况来说这是微不足道的),但为什么 .NET平台中不存在这样的类型.

public interface IBidirectionalEnumerator<T> : IEnumerator<T>
{
    bool MovePrev();
}
Run Code Online (Sandbox Code Playgroud)

显然,有许多集合类型无法实现这一点,因为它MoveNext()是破坏性的或改变底层集合的状态.但反过来,很多类型可以平凡实现这一点(List,IList,LinkedList,array).

为什么不存在这种类型?

Amy*_*y B 3

  • IEnumerator 支持 C# foreach 语句以及其他语言的循环结构。
  • IBi DirectionEnumerator 没有启用任何语句或通用编程习惯。

  • 实际上“foreach”不需要“IEnumerator&lt;T&gt;”。只要你的类有一个方法“GetEnumerator()”,它不带任何参数并返回一个具有“object Current { get; ”的对象。}` 属性和一个 `void MoveNext()` 方法,那么 `foreach` 就能很好地使用它。 (3认同)
  • 这就是我所说的鸭子打字的意思。这是编译时鸭子类型,确实如此,但它仍然像鸭子一样嘎嘎叫。 (3认同)
  • 这并不完全正确。C# 只需要 `MoveNext` 方法和 `Current` 属性即可工作。它根本不依赖于接口。 (2认同)