【发布时间】:2008-10-10 15:12:03
【问题描述】:
在我的 c# 应用程序中,我有一个使用枚举器导航的列表。它非常适合在列表中前进,但 Enumerator 类没有 MoveBack 方法。
是否有不同的类具有 MoveBack 方法,还是我需要自己编写?
【问题讨论】:
-
你使用的是什么版本的框架?
标签: .net
在我的 c# 应用程序中,我有一个使用枚举器导航的列表。它非常适合在列表中前进,但 Enumerator 类没有 MoveBack 方法。
是否有不同的类具有 MoveBack 方法,还是我需要自己编写?
【问题讨论】:
标签: .net
根据定义使用 IEnumerator 接口的任何枚举器都必须在第一个元素之前开始,并在集合中向前迭代。简而言之:它们不支持向后遍历。
如果您想要向后遍历,您需要编写自己的枚举函数,让您可以从任何地方开始。
【讨论】:
您可以反转列表并对其进行交互。或者,对于某些类,您可以从头到尾执行 for 循环并使用 ElementAt()。
【讨论】:
有时我不得不使用仅提供前向迭代器的某些 C++ STL 容器来处理这种情况。如果您事先知道需要向后退多少个元素,您可以这样做:
IEnumerator<int> e1 = yourListOfInt.GetEnumerator();
IEnumerator<int> e2 = e1;
for (int i = 0; i < 3; ++i) e2.MoveNext();
现在 e1 比 e2 领先三个元素。这是几年前我在 C++ 中的唯一解决方案。
但如果您使用的是列表,我假设您可以通过索引访问它?
【讨论】: