【发布时间】:2011-08-07 19:05:04
【问题描述】:
我有一本参差不齐的字典:
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"]
知道为什么要这样做吗?谢谢!
【问题讨论】:
-
告诉我们你初始化你的字典(不是数组顺便说一句)。当您需要不同的对象时,您可能会使用相同的对象。
-
对不起,有一个原始字典被多次添加到较大的字典中,所以这可能就是问题所在。但是,这是我初始化它的方式,也许您可以告诉我为什么会导致问题: tierOptions.Add(optionText, new Dictionary
>()); tierOptions[optionText] = BestClass.tieringInfo; -
所以从听上去,我应该有一个单独初始化的字典,将其设置为tieringInfo,然后将其添加到主字典中?
-
与您的问题无关,但您应该认真考虑使用
var代替声明左侧的变量类型。 -
感谢您的推荐。除了更少的代码之外,还有什么好处?另外,我注意到 tieringInfo 本来不应该是静态的,但这并没有解决问题。我也让它先设置一个局部变量,然后将其添加到字典中,但是当只有一个变量时,它们仍然会发生变化。
标签: c# dictionary jagged-arrays