2011-08-08 2 views
2

Quelqu'un peut-il me dire pourquoi un IDictionaryEnumerator est préféré pour boucler un HashTable.IEnumerator pour HashTable?

En quoi est-il différent de IEnumerator, bien qu'il en soit dérivé?

Quand utiliser quoi?

Répondre

4

IDictionaryEnumerator vous permet d'accéder à la fois à la clé et à la valeur de l'entrée en cours. Comme vous le constatez, un IDictionaryEnumerator est un IEnumerator, donc si vous l'utilisez simplement dans un foreach, vous ne le remarquerez que parce que la variable range est un DictionaryEntry; mais si vous travaillez manuellement avec IDictionaryEnumerator, vous trouverez les propriétés Key et Value ainsi que Current. Il n'est pas tellement préférable de boucler une Hashtable - c'est juste que si vous énumérez une Hashtable, vous énumérez des paires clé-valeur, pas seulement des valeurs, et IDictionaryEnumerator représente cela.

0

IDictionaryEnumerator est spécialement conçu pour énumérer les collections de paires clé/valeur. Il vous donne accès à la clé et à la valeur de l'entrée en cours (entre autres, comme indiqué dans le documentation). IEnumerator ne vous donnerait que la valeur actuelle.

7

Le fait est que la table de hachage/dictionnaire énumère paires, avec un .Key et .Value. C'est un peu discutable de 2.0, puisque Dictionary<TKey,TValue> implémente IEnumerable<KeyValuePair<TKey, TValue>> qui est plus clair. Cette interface simplifie simplement l'accès à la clé/valeur dans quelques cas.

Vous pouvez obtenir le même dans Hashtable (sans utiliser IDictionaryEnumerator) via:

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

Cette interface permet simplement plus pratique d'accéder à la clé/valeur dans quelques cas - quels cas? Pouvez-vous citer des exemples? – AdamFo