2016-06-06 4 views
0

У меня есть этот код для извлечения значения (целочисленного массива) из словаря. Затем добавьте один из элементов внутри целочисленного массива на основе оператора if, в котором он находится.с помощью TryGetValue из ключа и добавление не работает как интенсивно

 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; 
      } 

Теперь проблема у меня есть, что evertime я прочитал измененный OutOfDic массив обратно в словарь в стоимость части, где я указал ключ, каждое значение в словаре модифицируется, а также, и не только ключ я указано. Прокомментированная часть дает тот же результат, что и без комментариев. Как исправить эту проблему, чтобы добавить значение только к указанному ключу?

+3

_ "читать обратно в" _? Вы имеете в виду _write обратно в_? Вы также увеличиваете два ints не один. Кроме того, почему вы используете 'TryGetValue', если вы уверены, что ключ существует? Вы не справляетесь с тем, что ключа нет. –

+0

Благодарим вас за ответ. Я прочитал команды (например, 6 команд) в ключ массива и сделал значение (int [] TheArray) 0 .. Затем команды играют. и каждый раз, когда команда играет. (TeamOne Win. TeamTwo Lost). то командаOne P (Play) и W (Win) должны увеличиваться. TeamTwo P и L (Lost) должны увеличиваться. поэтому я TryGetValue. Я хочу, чтобы ценность команды играла и увеличивала эти значения. затем напишите (значит, напишите) их на указанное значение, где key == TeamOne –

ответ

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; 
+1

. Стоит отметить, что по той же причине установка значения ключа для модифицированного массива после его модификации не требуется. –

 Смежные вопросы

  • Нет связанных вопросов^_^