Добавить дубликаты ключей в NameValueCollection

Я читал, что NameValueCollection позволяет добавлять повторяющиеся ключи, однако, похоже, это не тот случай, когда я пытаюсь его использовать.

Мой код

using (var wb = new WebClient())
{
     var data = new NameValueCollection();
     var sourceData = (List<Dictionary<string, object>>)dic["mapData"];
     var countSource = sourceData.Count;

     foreach (var item in (List<Dictionary<string, object>>)dic["mapData"])
     {
          data.Add("pp", item["Latitude"].ToString() + "," + item["Longitude"].ToString());
     }

     var dataCount = data.Count;
     var response = wb.UploadValues(@"http://dev.virtualearth.net/REST/V1/Imagery/Map/road/?mapArea=" + swLat.ToString() + "," + swLong + "," + neLat + "," + neLong + "&mapSize=800,600&key=" + key, "POST", data);

     return this.LargeJson(new { imageData = CreateBase64Image(response) });
}

Что я наблюдаю

мои исходные данные содержат 36 элементов

часы

Я перебираю sourceData и добавляю элементы в свои данные NameValueCollection и добавляю элементы с тем же ключом «pp».

Я ожидал, что в моих данных NameValueCollection будет 36 элементов, но я получаю только 1, и все мои значения добавляются к одному и тому же ключу.

Что мне не хватает?


person G-Man    schedule 05.02.2014    source источник


Ответы (1)


Это ожидаемое поведение — см. документацию:

Если указанный ключ уже существует в целевом экземпляре NameValueCollection, указанное значение добавляется к существующему списку значений, разделенных запятыми, в формате «значение1, значение2, значение3». Значения связаны с одним и тем же ключом в целевом экземпляре NameValueCollection.

person Lee    schedule 05.02.2014
comment
Это ожидаемое поведение. Словарь — это, по сути, усиленная хэш-таблица. Ключевые значения должны быть уникальными. - person jstromwick; 06.02.2014
comment
Что делать, если значение содержит запятые? Например, я могу сделать Uri следующим образом: http://example.com/q?value=a%2Cb&value=b%2Cc. Значения будут расшифрованы как a,b и b,c, и если вы сложите их вместе, они получатся как a,b,b,c. Это не может работать таким образом. Должно быть сильное предупреждение о том, что использование повторяющихся ключей подразумевает, что ваши значения не могут содержать запятые, иначе произойдет необратимая потеря четко определенных границ между значениями параметров. Если бы NameValueCollection был реализован правильно, он поддерживал бы значения с идентичными именами в массиве, а не в строке, разделенной запятыми. - person Triynko; 30.12.2016