2011-08-08 54 views
2

誰能告訴我爲什麼IDictionaryEnumerator首選循環HashTable。IEnumerator for HashTable?

雖然它是從它派生出來的,它與IEnumerator有什麼不同?

何時使用哪個?

回答

4

IDictionaryEnumerator允許您訪問鍵和當前條目的值。正如你注意到的,IDictionaryEnumerator是一個IEnumerator,所以如果你只是在foreach中使用它,你只會注意到這一點,因爲range變量是一個DictionaryEntry;但如果您手動使用IDictionaryEnumerator,則會發現它具有Key和Value屬性以及Current。

它不是什麼讓它成爲循環Hashtable的'首選' - 它只是如果你枚舉一個Hashtable,你枚舉鍵值對,而不僅僅是值,IDictionaryEnumerator表示這一點。

0

IDictionaryEnumerator專門用於枚舉鍵/值對的集合。它使您可以訪問當前條目的鍵和值(其中包括其他內容,如documentation所示)。 IEnumerator只會給你當前的值。

7

重點是散列表/字典枚舉,與.Key.Value。這個從2.0開始有些爭議,因爲Dictionary<TKey,TValue>實現了IEnumerable<KeyValuePair<TKey, TValue>>這更清楚了。

這個接口只是簡單地在少數情況下訪問鍵/值更方便。

可以實現Hashtable相同(不使用IDictionaryEnumerator)通過:

foreach(DictionaryEntry pair in hashTable) { 
    .... use pair.Key and pair.Value 
} 
+0

這個接口就是讓您更方便的在少數情況下訪問鍵/值 - 這情況?你能舉出例子嗎? – AdamFo