2

私はぎざぎざの辞書を持っています:

 Dictionary<string, Dictionary<int, Dictionary<string, string>>> tierOptions = new Dictionary<string, Dictionary<int, Dictionary<string, string>>>();

後で、これらの値の 1 つを配列に設定するコードがあります。

 tierOptions[optionID][npID]["tName"] = cboTier.Text;

問題は、コードのこの部分を実行すると、すべての「tName」要素が 1 つの要素ではなく cboTier.Text に設定されることです。

たとえば、optionID が 1 で npID が 8 の場合、次の 3 つがありました。

 tierOptions[1][8]["tName"]
 tierOptions[2][8]["tName"]
 tierOptions[3][8]["tName"]

その特定のコード行は、tierOptions[1][8]["tName"] だけでなく、3 つすべてを設定します。

なぜこれをやっているのですか?ありがとう!

4

2 に答える 2

3

いくつかの「次元」(用語)で同じ辞書インスタンスを使用したように聞こえます。これは参照であるため、それらはすべて共有されます (ここでは、分離されたコピーへの自動クローンはありません)。

データを入力するとき、データを分離する必要がある場合は、分離されたディクショナリ インスタンスを使用するように注意してください。

于 2011-08-07T19:20:52.263 に答える
0

ええ、私はマルクと言うでしょう。この例を見て、辞書のタイプから vlaue を取得する方法を確認してください。

        Dictionary<string, Dictionary<int, Dictionary<string, string>>> dic = new Dictionary<string, Dictionary<int, Dictionary<string, string>>>();
        //add to 1st dic:
        dic.Add("A", new Dictionary<int, Dictionary<string, string>>());
        //add to 2nd dic:
        dic["A"].Add(1, new Dictionary<string, string>());
        //add to 3rd dic:
        dic["A"][1].Add("a", "value 1");

        //string KeyIn3rdDic = dic["A"][1].ToString();
        string ValueIn3rdDic = dic["A"][1]["a"]; //result is "value 1";        
于 2011-08-07T19:30:45.950 に答える