C# 使用键中的TryGetValue并添加未按预期工作的内容

C# 使用键中的TryGetValue并添加未按预期工作的内容,c#,dictionary,key,trygetvalue,C#,Dictionary,Key,Trygetvalue,我用这段代码从字典中检索一个值(整数数组),然后根据它所在的if语句递增整数数组中的一个元素 Dictionary<string, int[]> ResultDic = new Dictionary<string, int[]>(); if (TeamOnePoint > TeamTwoPoint) { ResultDic.TryGetValue(TeamOneResult, out OutOf

我用这段代码从字典中检索一个值(整数数组),然后根据它所在的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;
            }
Dictionary ResultDic=new Dictionary();
如果(TeamOnePoint>TeamTwoPoint)
{
结果TryGetValue(TeamOneResult,OutOfDic);
OutOfDic[0]++;
OutOfDic[1]++;
////结果移除(TeamOneResult);
////结果添加(TeamOneResult,OutOfDic);
结果dic[TeamOneResult]=OutOfDic;;
结果DIC.TryGetValue(TeamTwoResult,OutOfDic);
OutOfDic[0]++;
OutOfDic[2]++;
////ResultDic.移除(TeamTwoResult);
////ResultDic.Add(TeamTwoResult,OutOfDic);
结果DIC[TeamTwoResult]=OutOfDic;
}
现在的问题是,每次我将修改后的OutOfDic数组读回字典中我指定键的值部分时,字典中的每个值都会被修改,而不仅仅是我指定的键。
注释部分给出与未注释部分相同的结果。如何解决此问题以仅将值添加到指定的键?

只有在多次将同一数组添加到字典中时,才可能出现您描述的行为。由于数组是独立的,所以每次更改都会影响字典中的所有值

因此,不要这样做(例如):

请注意,由于相同的原因(它是引用类型),不必将数组重新分配给字典。因此,您可以删除这些行:

ResultDic[TeamOneResult] = OutOfDic;;
// ....
ResultDic[TeamTwoResult] = OutOfDic;

只有在多次将同一数组添加到字典中时,才可能出现您描述的行为。由于数组是独立的,所以每次更改都会影响字典中的所有值

因此,不要这样做(例如):

请注意,由于相同的原因(它是引用类型),不必将数组重新分配给字典。因此,您可以删除这些行:

ResultDic[TeamOneResult] = OutOfDic;;
// ....
ResultDic[TeamTwoResult] = OutOfDic;

“读回”?你的意思是回信?你也在增加两个整数,而不是一个。另外,如果您确定密钥存在,为什么要使用
TryGetValue
?如果没有钥匙,您将无法处理。谢谢您的回答。我将团队(例如6个团队)读入数组的键,并将值(int[]TheArray)设为0。。然后两队比赛。每次团队比赛。(一队赢,二队输)。然后teamOne的P(Play)和W(Win)必须递增。第二组P和L(丢失)必须递增。这就是为什么我尝试价值观。我想得到球队的价值,并增加这些价值。然后将它们写入(意味着写入)指定的值,其中key==TeamOne“读回”?你的意思是回信?你也在增加两个整数,而不是一个。另外,如果您确定密钥存在,为什么要使用
TryGetValue
?如果没有钥匙,您将无法处理。谢谢您的回答。我将团队(例如6个团队)读入数组的键,并将值(int[]TheArray)设为0。。然后两队比赛。每次团队比赛。(一队赢,二队输)。然后teamOne的P(Play)和W(Win)必须递增。第二组P和L(丢失)必须递增。这就是为什么我尝试价值观。我想得到球队的价值,并增加这些价值。然后将它们写入(意味着写入)指定的值,其中key==teamone可能值得注意的是,出于同样的原因,在修改后将键值设置为修改后的数组是不必要的。可能值得注意的是,出于同样的原因,在修改后将键值设置为修改后的数组是不必要的。
ResultDic[TeamOneResult] = OutOfDic;;
// ....
ResultDic[TeamTwoResult] = OutOfDic;