c# - IDictionary<string, string> 或 NameValueCollection

标签 c# generics

我有一个场景,其中我可以使用 NameValueCollection 或 IDictionary。但我想知道哪一个在性能方面会更好。

-- 使用 NameValueCollection

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

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

    if(sorting)
       //sort NameValueCollection nc here

    return nc;
}

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

最佳答案

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

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

关于c# - IDictionary<string, string> 或 NameValueCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/617443/

相关文章:

c# - 构建 C# .NET 客户端-服务器聊天应用程序的最佳方式是什么?

c# - MSBuild如何传递一个参数来设置一个属性值?

c# - 货币格式

c# - 从文件中打印出字符串的一部分,从开始序列到停止序列

c# - 我可以扩展一个泛型类来限制可以使用的类型吗?

c# - 是否可以在Parallel Foreach循环内使用局部变量(无需无意间重写以前的值)

依赖于某些参数的 Java 类

c# - 使用比较运算符,例如 '!=' 和 '==' ,泛型在 C# 中被限制为值

ios - 在 Swift 中使用泛型无法将“对象”转换为 'T'

Java 泛型 : List<Container<? >> = new LinkedList<Container<Double>>() 被禁止?