-1

私はWindowsPhoneを初めて使用します。

に4つの値を格納していDictionary<string, object>ます。エントリを確認すると、7つのエントリが表示され、3つはnullのキーと値です。

コード:

   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として実装されます。また、ハッシュテーブルに空のアイテムを含めることをお勧めする理由は2つあります。

  1. ハッシュテーブルでは、常に衝突の可能性があります(同じ「バケット」にマップされる2つのキー)。ハッシュテーブルの一部を空のままにしておくと、平均して衝突はごくわずかになります(特定のアイテムに適切なハッシュ関数があると仮定します)。

  2. 一度に1つのアイテムを増やすコレクションでは、現在必要なメモリよりも多くのメモリを割り当てる方がよいため、新しいアイテムを追加するたびにコレクション全体をコピーする必要はありません。たとえば、他のコレクションもこのように動作しますList<T>

ただし、コードから辞書にアクセスすると、これらの空のアイテムは表示されないため、実際にこれについて心配する必要はありません。

于 2012-09-20T09:37:18.120 に答える