2014-02-05 4 views
1

나는 NameValueCollection을 사용하여 중복 키를 추가 할 수 있다는 것을 읽었습니다. 그러나이 키를 사용하려고 시도하지 않은 경우에는 그렇지 않습니다.중복 키를 NameValueCollection에 추가하십시오.

내 코드 내가

내 sourceData 36 개 항목

watches

내가 sourceData을 반복 내 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) }); 
} 

동일한 키 "pp"로

내 데이터 NameValueCollection에 36 개의 항목이있을 것으로 예상했지만 1 점만 얻었고 모든 값이 동일한 키에 추가됩니다.

무엇이 누락 되었습니까?

답변

6

이 예상 된 작동 - the documentation 참조 :

를 지정한 키가 이미 인스턴스가 지정된 값이 형태 값 기존 쉼표로 구분 목록에 추가 대상 NameValueCollection은 존재하면 "value1, value2, value3". 값은 대상 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

관련 문제