我有一个锯齿状的词典:
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”]
知道为什么会这样做吗?谢谢!
答案 0 :(得分:3)
听起来就像你在几个“维度”(你的术语)中使用了相同的字典实例。由于这是一个参考,它们都是共享的(这里没有自动克隆到隔离的副本)。
填写数据时,请注意在数据分开时使用隔离的字典实例。
答案 1 :(得分:0)
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";