2014-02-05 98 views
1

我讀過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) }); 
} 

我所觀察

我sourceData包含36項

watches

我循環通過sourceData和添加項目到我的NameValueCollection數據和新增項目用同樣的鑰匙「pp」

我期待在我的數據NameValueCollection中有36項,但我只得到1,我的所有值都被附加到同一個鍵上。

我錯過了什麼?

回答

6

這是預期的行爲 - 見the documentation

如果指定的鍵目標的NameValueCollection 情況下,指定的值被添加到現有的值以逗號分隔 列表的形式已存在「值1,值2,值3」。與目標NameValueCollection 實例中的相同鍵相關聯的值爲 。

+0

這是預期的行爲。字典本質上是一個加快的哈希表。關鍵值必須是唯一的。 – jstromwick

+0

如果該值包含逗號,該怎麼辦?例如,我可以創建一個Uri:'http://example.com/q?value = a%2Cb&value = b%2Cc'。這些值將被解碼爲'a,b'和'b,c',並且如果你將它們擊中在一起,它們將最終成爲'a,b,b,c'。這不能這樣工作。應該有一個強烈的警告,即使用重複鍵意味着你的值不能包含逗號,否則會在參數值之間出現不可逆轉的明確界限。如果NameValueCollection被正確實現,它將在數組中維護具有相同名稱的值,而不是逗號分隔的字符串。 – Triynko