-1

我是 Windows 手机的新手。

我将四个值存储在Dictionary<string, object>. 当我检查条目时完成后,它会显示 7 个条目,其中三个是空键和值。

代码:

   Dictionary<string, string> obj = new Dictionary<string, string>();
    private void button1_Click(object sender, RoutedEventArgs e)
    {
        obj.Add("K2", "V2");
        obj.Add("K3", "V3");
        obj.Add("K4", "V4");
        obj.Add("K5", "V5");
    }

有什么帮助吗?

我用完字典的代码:

  private void GetLoginCallback(IAsyncResult asynchronousResult)
        {
            try
            {
                Dictionary<string,object> Parameters = new Dictionary<string,object>();

                /**httprequest for making asynchronous call**/
                HttpWebRequest httpRequest = (HttpWebRequest)asynchronousResult.AsyncState;
                /**response from the httprequest**/
                HttpWebResponse httpresponse = (HttpWebResponse)httpRequest.EndGetResponse(asynchronousResult);
                /**Reading the response as stream**/
                Stream streamResponse = httpresponse.GetResponseStream();
                using(StreamReader streamRead = new StreamReader(streamResponse))
                {
                    var response = streamRead.ReadToEnd();
                    //Deployment.Current.Dispatcher.BeginInvoke(new Action(() =>
                    //{
                    if (response != null && httpresponse.StatusCode == HttpStatusCode.OK)
                    {
                        WebHeaderCollection headers = httpresponse.Headers;
                        /**getting Session_ID **/
                        string session_cookie = headers[DisplayMessage.Set_Cookie];
                        string sessionCookie = headers[DisplayMessage.Set_Cookie];
                        string[] values = sessionCookie.Split(DisplayMessage.Split_SemiCollen);
                        string[] jID = values[0].Split(DisplayMessage.Split_EqualTo);
                        jsessionId = jID[1];

                        /**storing Authentication parameters in dictionary**/
                            Parameters.Add("Username", "test4");
                            Parameters.Add("Password", "*****");
                            Parameters.Add("JSessionID", "FGBfdhhfuhuhhbh_Path");
                            Parameters.Add("SessionCookie","FGBfdhhfuhuhhbh_Path;dpk");


                        //}));
                    };
                }
            }
            catch(Exception ex)
            {

            }
        }
4

1 回答 1

2

如果您的意思是在调试器中,字典显示 4 个您所期望的项目和 3 个空项目,那是因为这就是数据在内部存储的方式。Dictionary被实现为一个哈希表。在哈希表中包含空项是个好主意,有两个原因:

  1. 使用哈希表,总是有可能发生冲突(映射到同一个“桶”的两个键)。如果您将哈希表的一部分保留为空,则平均而言只会发生少量冲突(假设给定项目的哈希函数良好)。

  2. 对于一次增长一个项目的集合,最好分配比您现在需要的更多的内存,这样您就不必每次添加新项目时都复制整个集合。其他集合也有这种行为,例如List<T>.

但是您实际上不必担心这一点,因为当您从代码中访问字典时,您不会看到那些空项。

于 2012-09-20T09:37:18.120 回答