在锯齿状字典中设置值设置所有值

时间:2011-08-07 19:05:04

标签: c# dictionary jagged-arrays

我有一个锯齿状的词典:

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

稍后,我有代码在数组中设置其中一个值:

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

问题在于,当它运行这部分代码时,所有“tName”元素都设置为cboTier.Text而不是只有一个元素。

例如,如果optionID为1且npID为8,我就有这三个:

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

该特定代码行将设置所有三个,而不仅仅是tierOptions [1] [8] [“tName”]

知道为什么会这样做吗?谢谢!

2 个答案:

答案 0 :(得分:3)

听起来就像你在几个“维度”(你的术语)中使用了相同的字典实例。由于这是一个参考,它们都是共享的(这里没有自动克隆到隔离的副本)。

填写数据时,请注意在数据分开时使用隔离的字典实例。

答案 1 :(得分:0)

是的,我会说sac是Marc。 请查看此示例,了解如何从您的词典类型中检索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";