我的程序中有以下foreach循环:
Dictionary<string, int[]> summaryDate_clipsEpisodesImps = new Dictionary<string, int[]>();
Dictionary<string, int[]> summaryPartner_clipsEpisodesImps = new Dictionary<string, int[]>();
foreach (DataRow row1 in dt10.Rows)
{
int[] numbers = new int[3];
numbers[0] = 0;
numbers[1] = 0;
numbers[2] = 0;
if (!dictionary1.ContainsKey(row1["value1"].ToString().Trim()))
{
dictionary1.Add(row1["value1"].ToString().Trim(), numbers);
}
if (!dictionary2.ContainsKey(row1["value2"].ToString().Trim()))
{
dictionary2.Add(row1["value2"].ToString().Trim(), numbers);
}
if (row1["yes_or_no"].ToString().Trim() == "yes")
{
dictionary1[row1["value1"].ToString().Trim()][0] = dictionary1[row1["value1"].ToString().Trim()][0] + Convert.ToInt32(row1["a_number"]);
dictionary2[row1["value2"].ToString().Trim()][0] = dictionary2[row1["value2"].ToString().Trim()][0] + Convert.ToInt32(row1["a_number"]);
}
}
基本上,我循环遍历数据表,并根据我在每条记录中找到的值创建字符串/ int数组的字典。然后我试图根据记录中另一个字段的存在增加数组中的第一个值。
当我检查yes_or_no值时,我的问题发生在if语句中。当在该语句中存在第二行递增字典2时,字典1中的值增加相同的值。我不知道为什么会这样。
如果不完全清楚,请告诉我。在此先感谢您的帮助。
答案 0 :(得分:1)
您正在为每个字典添加一个指向数组的指针。两个字典都查看相同的数组,因此当您通过dictionary2修改数组时,dictionary1会看到更改。
答案 1 :(得分:1)
这是因为两个字典条目中的值都指向numbers
的同一个实例。这意味着对一个的任何改变都会影响另一个。
要在每个字典中添加一个新实例,您可以执行以下操作:
...
if (!dictionary1.ContainsKey(row1["value1"].ToString().Trim()))
{
dictionary1.Add(row1["value1"].ToString().Trim(), GetNumbersArray());
}
if (!dictionary2.ContainsKey(row1["value2"].ToString().Trim()))
{
dictionary2.Add(row1["value2"].ToString().Trim(), GetNumbersArray());
}
...
private int[] GetNumbersArray()
{
int[] numbers = new int[3];
numbers[0] = 0;
numbers[1] = 0;
numbers[2] = 0;
return numbers;
}