KeyValuePair VS DictionaryEntry

时间:2009-05-25 05:20:23

标签: c#

KeyValuePair(通用版本和DictionaryEntry?

)有什么区别?

为什么在通用的Dictionary类中使用KeyValuePair而不是DictionaryEntry?

3 个答案:

答案 0 :(得分:99)

KeyValuePair<TKey,TValue>代替DictionaryEntry,因为它是一般化的。使用KeyValuePair<TKey,TValue>的优点是我们可以为编译器提供有关字典中的内容的更多信息。扩展Chris的例子(其中我们有两个包含<string, int>对的词典)。

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;
}

答案 1 :(得分:44)

KeyValuePair&lt; T,T>用于迭代字典&lt; T,T>。这是.Net 2(及以后)的做事方式。

DictionaryEntry用于迭代HashTables。这是.Net 1的做事方式。

以下是一个例子:

Dictionary<string, int> MyDictionary = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in MyDictionary)
{
  // ...
}

Hashtable MyHashtable = new Hashtable();
foreach (DictionaryEntry item in MyHashtable)
{
  // ...
}

答案 2 :(得分:0)

这就是问题的解释方式。请参阅以下链接:

https://www.manojphadnis.net/need-to-know-general-topics/listkeyvaluepair-vs-dictionary

List

  1. 打火机

  2. List 中的插入速度更快

  3. 搜索比字典慢

  4. 这可以序列化为 XMLSerializer

  5. 无法更改键值。键值对只能在创建时赋值。如果要更改,请在同一位置删除并添加新项目。

字典

  1. 插入速度较慢。必须计算哈希

  2. 由于 Hash,搜索速度更快。

  3. 无法序列化。需要自定义代码。

  4. 您可以更改和更新字典。