HttpValueCollection和NameValueCollection

Ami*_*oni 34 c#

HttpValueCollection和之间有什么区别NameValueCollection
如果可能,请举例说明.

谢谢

Dar*_*rov 48

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&param2=value2"
        Console.WriteLine(values.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 小更正 - 除非在构造函数中指定区分大小写的比较器,否则默认情况下,NameValueCollection对于键不区分大小写**. (9认同)

Jat*_*hvi 6

在达林的答案中不明显的一点是,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());  
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

param1=value1&param2=value2
System.Collections.Specialized.NameValueCollection
Run Code Online (Sandbox Code Playgroud)