什么是
如果可能的话,请通过示例进行说明。
HttpValueCollection
和NameValueCollection
之间的区别?如果可能的话,请通过示例进行说明。
谢谢
HttpValueCollection
和NameValueCollection
之间的区别?谢谢
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());
}
}
在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
HttpValueCollection
。由于其非泛型特性,NameValueCollection
不是我会使用的类。例如,我更喜欢使用更强类型的Dictionary<TKey, TValue>
。 - Darin Dimitrov