IDictionary <string,string>或NameValueCollection

Ujw*_*ire 31 c# generics

我有一个场景,我可以使用NameValueCollection或IDictionary.但我想知道哪一个会更好地表现.

- 使用NameValueCollection

NameValueCollection options()
{
    NameValueCollection nc = new NameValueCollection();

    nc = ....; //populate nc here

    if(sorting)
       //sort NameValueCollection nc here

    return nc;
}
Run Code Online (Sandbox Code Playgroud)

- 使用IDictionary

IDictionary<string, string> options()
{
    Dictionary<string, string> optionDictionary = new Dictionary<string, string>();

    optionDictionary = ....; //populate

    if(sorting)
       return new SortedDictionary<string, string>(optionDictionary);
    else
       return optionDictionary;
}
Run Code Online (Sandbox Code Playgroud)

Jus*_* R. 29

这些集合类型不完全可互换:NameValueCollection允许通过整数索引进行访问.如果您不需要该功能,则不应使用NameValueCollection,因为索引不是"免费".

根据您正在查看的字符串数量,我会考虑使用Hashtable或IDictionary.Krzysztof Cwalina在这里讨论了细微之处:http://blogs.gotdotnet.com/kcwalina/archive/2004/08/06/210297.aspx.

  • 不对.根据这篇关于namevaluecollection的msdn文章:http://msdn.microsoft.com/en-us/library/system.collections.specialized.namevaluecollection.aspx"此类型的集合不保留元素的顺序,也没有特定的顺序在枚举集合时保证." (15认同)
  • NameValueCollection还支持每个键不止一个值(查询字符串需要等). (11认同)

lom*_*axx 9

IDictionary的另一个优点是,与NameValueCollection不同,它不是特定于实现的.


tsi*_*mon 5

我同意 fatcat 和 lomaxx(并且对这两个答案都投了赞成票)。我想补充一点,在集合类型之间进行选择时,集合类型的性能很可能是最后一个考虑因素。使用最适合您的使用需求的类型。如果您处于代码的性能关键部分(并且很可能不是),那么唯一的答案是衡量每个案例 - 不要相信互联网,相信数字。