相同类型的KeyValuePair列表和字典之间有什么区别?是否有适当的时间使用其中之一?
相同类型的KeyValuePair列表和字典之间有什么区别?是否有适当的时间使用其中之一?
Answers:
当您不需要快速查找键时,维护所使用的哈希表Dictionary
会有一定的开销。
字典是通用类型,包含键/值对的集合。字典对于查找操作而言是快速的,因为在内部使用了哈希函数。这意味着,所有键在dictionary中必须是唯一的。
考虑以下示例:
List<KeyValuePair<int, string>> pairs = new List<KeyValuePair<int, string>>();
pairs.Add(new KeyValuePair<int, string>(1, "Miroslav"));
pairs.Add(new KeyValuePair<int, string>(2, "Naomi"));
pairs.Add(new KeyValuePair<int, string>(2, "Ingrid"));
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "Miroslav");
dict.Add(2, "Naomi");
dict.Add(2, "Ingrid"); // System.ArgumentException: An item with the same key has already been added.
因此,您应该始终考虑至少两件事:
当您关心项目的顺序时,列表也很有用。
在Silverlight的SOAP Web服务中,我们发现Dictionary的不进行序列化。在这种情况下,您将在字典上使用KeyValuePair列表。
。
从http://blogs.msdn.com/bclteam/archive/2004/09/03/225473.aspx:
KeyValuePair
与DictionaryEntry
[Krzysztof Cwalina]我们讨论了
IEnumerable
on的 实现问题Dictionary<K,V>
。应该IEnumerable.GetEnumerator().Current
返回什么类型 ?KeyValuePair<K,V>
还是DictionaryEntry
?相同ICollection.CopyTo
。哪种类型的实例应复制到阵列?我们决定如下:
IEnumerable
和ICollection
接口实现将使用KeyValuePair<K,V>
的项目类型。IDictionary
特定成员(GetEnumerator
returnIDictionaryEnumerator
)将DictionaryEntry
用作项目类型。原因是我们正在做出
IEnumerator<T>
将扩展 到何处的更改IEnumerator
。如果从Dictionary<K,V>
->IEnumerable<T>
-> 遍历层次结构,IEnumerable
我们突然更改了从枚举数返回的项的类型,那将是非常奇怪的 。