2011-08-08 12 views
2

誰かがなぜHashTableをループするためにIDictionaryEnumeratorが優先されるのか教えてもらえますか?HashTableのIEnumerator?

これはIEnumeratorとはどのように異なるのですか?

いつ使うのですか?

答えて

4

IDictionaryEnumeratorを使用すると、現在のエントリのキーと値の両方にアクセスできます。あなたが注意するように、IDictionaryEnumeratorはIEnumeratorなので、foreachでそれを使用しているのであれば、範囲変数がDictionaryEntryなので、これに気付くだけです。 IDictionaryEnumeratorを手作業で使用している場合は、[Current]と[Key]および[Value]の各プロパティがあることがわかります。

Hashtableをループするには「あまり好きではありません。ハッシュテーブルを列挙すると、値だけでなくキーと値のペアが列挙され、IDictionaryEnumeratorがそのことを表します。

0

IDictionaryEnumeratorは、キーと値のペアのコレクションを列挙するために特別に設計されています。現在のエントリのキーと値にアクセスすることができます(特に、documentationのように)。 IEnumeratorは現在の値のみを返します。

7

ハッシュテーブル/辞書はのペアをと表し、.Key.Valueを列挙しています。これは、Dictionary<TKey,TValue>IEnumerable<KeyValuePair<TKey, TValue>>を実装しているので、2.0から少し気になります。

このインターフェイスでは、いくつかのケースでキー/値にアクセスする方が簡単です。 - 例

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

このインタフェースは、単にいくつかのケースでは、キー/値にアクセスすることがより便利になります:

あなたは経由(IDictionaryEnumeratorを使用せずに)Hashtableで同じことを達成することができますか?あなたは例を挙げることができますか? – AdamFo