Как я могу решить "Элемент уже был добавлен. Ключ в словаре:" ошибки? - PullRequest
2 голосов
/ 03 октября 2011

У меня есть приложение, которое зависло, когда я пытался добавить в него элементы. Когда я проверил файл трассировки, я получил эту запись:

   for (int i=0; i<objects.Count; i++) 
   {
      DataModelObject dmo = (DataModelObject)objects.GetAt(i);
      sl.Add(dmo.Guid, dmo);
   }

}

Я не знаю, как решить эту проблему.

Ответы [ 2 ]

9 голосов
/ 03 октября 2011

Проблема в том, что в отсортированном списке каждый ключ должен быть уникальным. Поэтому вам нужно убедиться, что вы не вставляете один и тот же ключ (значение guid) дважды. Код показан ниже:

 for (int i=0; i<objects.Count; i++) 
 {        
    DataModelObject dmo = (DataModelObject)objects.GetAt(i);

    if (!sl.ContainsKey(dmo.Guid))
    {
        sl.Add(dmo.Guid, dmo);
    }
 }

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

1 голос
/ 03 октября 2011

Исключение означает, что вы добавляете один и тот же key дважды к вашему dictionary, чтобы решить эту проблему, вы можете начать с проверки того, что DataModelCollection objects, переданный функции, имеет уникальные значения Key (что в вашем случае тип данных Guid) dmo.Guid

...