В чем разница между 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());
}
}
Одна точка, которая не очевидна в ответе Дарина, заключается в том, что 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