C #: доступ к обратному перечислителю для связанного списка - PullRequest
0 голосов
/ 25 апреля 2011

Я создал «обратный итератор» для 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>())

это не работает.

Что мне делать?

1 Ответ

4 голосов
/ 25 апреля 2011

Это не так, как работает foreach. Все, что реализует интерфейс IEnumerable, должно переопределять метод GetEnumerator. Это метод, вызываемый foreach. Если вы хотите перечислить в обратном порядке, вам нужно сделать свой собственный IEnumerable и заставить его GetEnumerator возвращать ReverseEnumerator. Вы можете добиться этого с помощью метода расширения, просто попросите метод расширения преобразовать ваш LinkedList в ReverseLinkedList.

...