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

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

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

Что я должен делать?


person Francesco Belladonna    schedule 25.04.2011    source источник
comment
Что значит Не работает? Выдает ошибку, результаты не такие, как вы ожидали? Не компилируется? и т.д   -  person taylonr    schedule 25.04.2011
comment
Зачем «обратный» счетчик, когда можно просто выполнить итерацию в обратном направлении через обычный счетчик?   -  person Cos Callis    schedule 25.04.2011
comment
@Потому что, как вы выполняете итерацию в обратном направлении через обычный счетчик?   -  person svick    schedule 25.04.2011
comment
@svick, посмотри ответ, который я разместил ниже..   -  person Cos Callis    schedule 25.04.2011
comment
@Потому что ваше решение не имеет ничего общего с перечислителем, то есть IEnumerator<T> или IEnumerable<T>.   -  person svick    schedule 25.04.2011
comment
@taylonr: выдает ошибку компиляции, говоря, что LinkedList.GetEnumerator() не возвращает объект с методом GetEnumerator   -  person Francesco Belladonna    schedule 27.04.2011


Ответы (1)


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

person cadrell0    schedule 25.04.2011