Reputation: 1899
What is the difference between KeyValuePair which is the generic version and DictionaryEntry?
Why KeyValuePair is used instead of DictionaryEntry in generic Dictionary class?
Upvotes: 143
Views: 121891
Reputation: 341
This is how the issue is explained. see the following link:
https://www.manojphadnis.net/need-to-know-general-topics/listkeyvaluepair-vs-dictionary
List< KeyValuePair >
Lighter
Insertion is faster in List
Searching is slower than Dictionary
This can be serialized to XMLSerializer
Changing the key,value is not possible. Keyvaluepair can be assigned value only during creation. If you want to change then remove and add new item in same place.
Dictionary<T Key, T Value>
Heavy
Insertion is slower. Has to compute Hash
Searching is faster because of Hash.
Can't be serialized. Custom code is required.
You can change and update dictionary.
Upvotes: 16
Reputation: 32260
KeyValuePair<TKey,TValue>
is used in place of DictionaryEntry
because it is generified. The advantage of using a KeyValuePair<TKey,TValue>
is that we can give the compiler more information about what is in our dictionary. To expand on Chris' example (in which we have two dictionaries containing <string, int>
pairs).
Dictionary<string, int> dict = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in dict) {
int i = item.Value;
}
Hashtable hashtable = new Hashtable();
foreach (DictionaryEntry item in hashtable) {
// Cast required because compiler doesn't know it's a <string, int> pair.
int i = (int) item.Value;
}
Upvotes: 125
Reputation: 40641
KeyValuePair < T,T > is for iterating through Dictionary < T,T >. This is the .Net 2 (and onwards) way of doing things.
DictionaryEntry is for iterating through HashTables. This is the .Net 1 way of doing things.
Here's an example:
Dictionary<string, int> MyDictionary = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in MyDictionary)
{
// ...
}
Hashtable MyHashtable = new Hashtable();
foreach (DictionaryEntry item in MyHashtable)
{
// ...
}
Upvotes: 56