KeyValuePair(通用版本和DictionaryEntry?
)有什么区别?为什么在通用的Dictionary类中使用KeyValuePair而不是DictionaryEntry?
答案 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
打火机
List 中的插入速度更快
搜索比字典慢
这可以序列化为 XMLSerializer
无法更改键值。键值对只能在创建时赋值。如果要更改,请在同一位置删除并添加新项目。
字典
重
插入速度较慢。必须计算哈希
由于 Hash,搜索速度更快。
无法序列化。需要自定义代码。
您可以更改和更新字典。