0

我有这段代码可以从字典中检索一个值(整数数组)然后根据它所在的 if 语句递增整数数组中的一个元素。

        Dictionary<string, int[]> ResultDic = new Dictionary<string, int[]>();
        if (TeamOnePoint > TeamTwoPoint)
        {
            ResultDic.TryGetValue(TeamOneResult, out OutOfDic);
            OutOfDic[0]++;
            OutOfDic[1]++;
            ////ResultDic.Remove(TeamOneResult);
            ////ResultDic.Add(TeamOneResult, OutOfDic);
            ResultDic[TeamOneResult] = OutOfDic;;
            ResultDic.TryGetValue(TeamTwoResult, out OutOfDic);
            OutOfDic[0]++;
            OutOfDic[2]++;
            ////ResultDic.Remove(TeamTwoResult);
            ////ResultDic.Add(TeamTwoResult, OutOfDic);
            ResultDic[TeamTwoResult] = OutOfDic;
            }

现在我遇到的问题是,每当我将修改后的 OutOfDic 数组读回字典中指定键的值部分时,字典中的每个值也会被修改,而不仅仅是我指定的键。注释部分给出与未注释部分相同的结果。如何解决此问题以仅将值添加到指定的键?

4

1 回答 1

2

您所描述的行为只有在您多次将相同的数组添加到字典中时才可能发生。由于数组是引用类型,因此每次更改都会影响字典中的所有值。

所以不要这样做(例如):

Dictionary<string, int[]> ResultDic = new Dictionary<string, int[]>();
int[] array = { 1, 2, 3, 4, 5 };
ResultDic.Add("TeamOne", array);
ResultDic.Add("TeamTwo", array);

你应该做这个:

int[] array = { 1, 2, 3, 4, 5 };
ResultDic.Add("TeamOne", array);
array = new int[] { 1, 2, 3, 4, 5 };
ResultDic.Add("TeamTwo", array);

请注意,出于同样的原因(它是引用类型),没有必要将数组重新分配给字典。所以你可以删除这些行:

ResultDic[TeamOneResult] = OutOfDic;;
// ....
ResultDic[TeamTwoResult] = OutOfDic;
于 2016-06-06T13:03:10.043 回答