KeyValuePair против NameValueCollection - PullRequest
10 голосов
/ 27 мая 2011

Есть и другие вопросы, например KeyValuePair против IDictionary, но я чувствую, что этот вопрос немного отличается.

NameValueCollection принимает строковый ключ и строковое значение.словарь, вы говорите ему, какой тип ключ и значение.

Я не понимаю, почему существует NameValueCollection.Инициализация KeyValuePair со строковыми типами кажется достаточной.Я также заметил, что NameValueCollection имеет еще несколько доступных методов, но опять же, почему бы не объединить оба класса в один?

Ответы [ 3 ]

13 голосов
/ 27 мая 2011

A KeyValuePair не похоже на словарь.Это просто кортеж, содержащий ключ и значение.

NameValueCollection - это обертка, превышающая на a IList<KeyValuePair<string,IList<string>>> (обратите внимание, что NameValueCollection предшествует обобщению) - операции типа Get(string) равны O(n), и элементы могут быть выбраныindex и каждый ключ соответствует одному или более значениям (это отличается от Dictionary<string,string>).

Причина этого объясняется в документации NameValueCollection :

Этот класс можно использовать для заголовков, строк запросов и данных форм.

Более новые "замена" data-структура с некоторым аналогичным поведением для NameValueCollection является Lookup<string,string>.(Однако он не поддерживает напрямую те же операции, что и неизменяемые, как примечания спонсора.)

Счастливое кодирование.

3 голосов
/ 27 мая 2011

NameValueCollection существует в .NET 1.0 и 1.1, KeyValuePair является универсальным типом и не добавлялся в .NET до 2.0.Все классы в System.Collections.Specialized все предшествуют добавлению обобщения;он содержит некоторые строго типизированные (если хотите, специализированные) для использования, когда это именно то, что вам нужно, чтобы пользователям не приходилось преобразовывать объект в строку.

0 голосов
/ 27 мая 2011

KeyValuePair - это компонент, используемый для итерации словаря

var dictionary = new Dictionary<int,long>

foreach(var kvp in dictionary)
{
    // kvp is KeyValuePair<int,long>. kvp.Key is the int key and kvp.Value is the long value for the key
}

NameValueCollection индексируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...