【发布时间】:2011-11-22 18:55:59
【问题描述】:
HttpValueCollection 和 NameValueCollection 有什么区别?
如果可能,请举例说明。
谢谢
【问题讨论】:
标签: c#
HttpValueCollection 和 NameValueCollection 有什么区别?
如果可能,请举例说明。
谢谢
【问题讨论】:
标签: c#
NameValueCollection 对键区分大小写,HttpValueCollection 不区分。此外,HttpValueCollection 是一个派生自 NameValueCollection 的内部类,您永远不应该在代码中直接使用它。 HttpValueCollection 的另一个特性是,当您将值添加到此集合时,它会自动对值进行 url 编码。
下面是HttpValueCollection类的使用方法:
class Program
{
static void Main()
{
// returns an implementation of NameValueCollection
// which in fact is HttpValueCollection
var values = HttpUtility.ParseQueryString(string.Empty);
values["param1"] = "v&=+alue1";
values["param2"] = "value2";*
// prints "param1=v%26%3d%2balue1¶m2=value2"
Console.WriteLine(values.ToString());
}
}
【讨论】:
HttpValueCollection。 NameValueCollection 由于它的非泛型性质,我不会使用它。例如,我更喜欢类型更强的Dictionary<TKey, TValue>。
在 Darin 的回答中不明显的一点是 NameValueCollection 不会覆盖 ToString() 方法,而 HttpValueCollection 会覆盖它。如果要将集合转换回查询字符串,则此特定属性和值的隐式 URL 编码使后者成为正确的选择。
public class Test
{
public static void Main()
{
var httpValueCollection = HttpUtility.ParseQueryString(string.Empty);
httpValueCollection["param1"] = "value1";
httpValueCollection["param2"] = "value2";
Console.WriteLine(httpValueCollection.ToString());
var nameValueCollection = new NameValueCollection();
nameValueCollection["param1"] = "value1";
nameValueCollection["param2"] = "value2";
Console.WriteLine(nameValueCollection.ToString());
}
}
输出:
param1=value1¶m2=value2
System.Collections.Specialized.NameValueCollection
【讨论】: