【问题标题】:Two directional list Enumerator in .NET.NET 中的两个有向列表枚举器
【发布时间】:2008-10-10 15:12:03
【问题描述】:

在我的 c# 应用程序中,我有一个使用枚举器导航的列表。它非常适合在列表中前进,但 Enumerator 类没有 MoveBack 方法。

是否有不同的类具有 MoveBack 方法,还是我需要自己编写?

【问题讨论】:

  • 你使用的是什么版本的框架?

标签: .net


【解决方案1】:

根据定义使用 IEnumerator 接口的任何枚举器都必须在第一个元素之前开始,并在集合中向前迭代。简而言之:它们不支持向后遍历。

如果您想要向后遍历,您需要编写自己的枚举函数,让您可以从任何地方开始。

【讨论】:

    【解决方案2】:

    您可以反转列表并对其进行交互。或者,对于某些类,您可以从头到尾执行 for 循环并使用 ElementAt()。

    【讨论】:

      【解决方案3】:

      有时我不得不使用仅提供前向迭代器的某些 C++ STL 容器来处理这种情况。如果您事先知道需要向后退多少个元素,您可以这样做:

      IEnumerator<int> e1 = yourListOfInt.GetEnumerator();
      IEnumerator<int> e2 = e1;
      for (int i = 0; i < 3; ++i) e2.MoveNext();
      

      现在 e1 比 e2 领先三个元素。这是几年前我在 C++ 中的唯一解决方案。

      但如果您使用的是列表,我假设您可以通过索引访问它?

      【讨论】:

        猜你喜欢
        • 2010-12-08
        • 2013-04-25
        • 1970-01-01
        • 2012-11-17
        • 2016-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多