2011-04-25 89 views
0

我創建了一個「反向itearator」對於一個LinkedList,現在我想用的擴展方法使用一個LinkedList:C#:訪問反向枚舉數

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

它不起作用。

我該怎麼辦?

+3

「不起作用」是什麼意思?它會拋出一個錯誤,結果不是你所期望的嗎?它不會編譯? etc – taylonr 2011-04-25 14:44:26

+0

爲什麼一個'反向'枚舉器,當你可以通過一個普通的枚舉器向後迭代? – 2011-04-25 14:47:29

+0

@Cos,你如何通過普通的枚舉器向後迭代? – svick 2011-04-25 14:51:03

回答

4

這不是foreach是如何工作的。任何實現IEnumerable接口的東西都必須重寫GetEnumerator方法。這是由foreach調用的方法。如果你想向後枚舉,你需要創建自己的IEnumerable並讓它的GetEnumerator返回ReverseEnumerator。你可以用擴展方法來解決這個問題,只需要將擴展​​方法轉換成一個ReverseLinkedList。

+0

感謝您的建議! – 2011-04-25 17:12:26