还有其他问题,如KeyValuePair vs IDictionary,但我觉得这一点略有不同.
NameValueCollection获取字符串键和字符串值.
KeyValuePair就像一本字典,你告诉它键和值的类型.
我不明白为什么NameValueCollection存在.用字符串类型初始化KeyValuePair似乎足够了.我还注意到,NameValueCollection有一些更多的方法可用,但是又是为什么不将这两个类合并成一个?
解决方法
KeyValuePair不像字典.它只是一个包含Key和Value的元组.
NameValueCollection包装在相当于IList< KeyValuePair< string,IList< string>>> (注意NameValueCollection预览泛型) – 像Get(string)这样的操作是O(n),并且可以通过索引获取项目,并且每个Key映射到一个或多个值(这与Dictionary< string,string>)不同.
这个原因在the NameValueCollection documentation中解释:
This class can be used for headers,query strings and form data.
对于NameValueCollection而言,具有类似行为的较新的“替换”数据结构为
Lookup<string,string>
.(但是,它不直接支持与不可替代的注释相同的操作.)快乐编码.