В чем разница между 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