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>())

它不工作。

我该怎么办?

c#:访问链表的反向枚举器

foreach不是这样工作的。任何实现IEnumerable接口的东西都必须重写GetEnumerator方法。这是foreach调用的方法。如果你想向后枚举,你需要创建你自己的IEnumerable并让它的getenenumerator返回ReverseEnumerator。您仍然可以使用扩展方法来实现这一点,只需使用扩展方法将您的LinkedList转换为ReverseLinkedList。