C# · 12月 31, 2021

c# – KeyValuePair vs. NameValueCollection

还有其他问题,如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>.(但是,它不直接支持与不可替代的注释相同的操作.)

快乐编码.