.NET中的两个方向列表枚举器

时间:2008-10-10 15:12:04

标签: .net

在我的c#app中,我有一个列表,我用一个Enumerator导航。它非常适合在列表中前进,但Enumerator类没有MoveBack方法。

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你可以反转列表并迭代它。或者,对于某些类,您可以从头到尾执行for循环并使用Element()。

答案 2 :(得分:0)

有时我不得不用某些只提供前向迭代器的C ++ STL容器处理这种情况。如果您事先知道需要向后移动多少元素,则可以执行以下操作:

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

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

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