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