我有这段代码从字典中检索一个值(整数数组),然后根据它所在的 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 数组读回字典中指定键的值部分时,字典中的每个值也会被修改,而不仅仅是我指定的键。注释部分给出的结果与未注释部分的结果相同。如何解决此问题以仅将值添加到指定的键?
只有当您多次将相同的数组添加到字典中时,您描述的行为才有可能。由于数组是引用类型,因此每次更改都会影响字典中的所有值。
因此,与其这样做(例如):
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;