c#:访问链表的反向枚举器
本文关键字:枚举 访问 链表 | 更新日期: 2023-09-27 17:52:43
我已经为LinkedList创建了一个"反向迭代器",现在我想用一个扩展方法来使用它:
public static class LinkedListExtensionMethods
{
public static IEnumerator GetReverseEnumerator<T>(this LinkedList<T> linkedList)
{
return new LinkedListReverseEnumerator<T>(linkedList);
}
public static IEnumerator<T> GetReverseGenericEnumerator<T>(this LinkedList<T> linkedList)
{
return new LinkedListReverseEnumerator<T>(linkedList);
}
}
但是如果我写:
foreach (ICommand command in _CompoundDoCollection.GetReverseEnumerator<ICommand>())
它不工作。
我该怎么办?
foreach不是这样工作的。任何实现IEnumerable接口的东西都必须重写GetEnumerator方法。这是foreach调用的方法。如果你想向后枚举,你需要创建你自己的IEnumerable并让它的getenenumerator返回ReverseEnumerator。您仍然可以使用扩展方法来实现这一点,只需使用扩展方法将您的LinkedList转换为ReverseLinkedList。