Как я могу решить, что элемент уже добавлен. Ключ в словаре: ошибки?

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

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

}

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


person user972380    schedule 03.10.2011    source источник
comment
Что такое sl? Объект SortedList, я полагаю?   -  person TylerH    schedule 18.06.2019


Ответы (2)


Проблема в том, что в отсортированном списке каждый ключ должен быть уникальным. Поэтому вам нужно убедиться, что вы не вставляете один и тот же ключ (значение 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);
    }
 }

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

person Kevin Holditch    schedule 03.10.2011
comment
я тестирую это, на данный момент проблем нет, но вы сказали, что если вы ожидаете более одного значения для каждого ключа, вам нужно использовать другой тип коллекции, можете ли вы это уточнить. Начало моего вопроса, которое я упомянул в своей ошибке трассировки. Ключ в словаре: «7d210e02-176e-4910-a8aa-0a8606ec95cc». Добавляемый ключ: «7d210e02-176e-4910-a8aa-0a8606ec95cc». - person user972380; 03.10.2011
comment
Я имею в виду, что если у вас есть два объекта DataModelObject с одним и тем же guid, означает ли это, что они являются одним и тем же объектом DataModelObject? Если это так, то приведенный выше код в порядке. - person Kevin Holditch; 03.10.2011
comment
вы правы, у меня есть еще один вопрос, предыдущий код приведет к зависанию любого приложения?? или зависание по какой-то другой причине?? - person user972380; 03.10.2011
comment
Если у вас нет инструкции if для проверки наличия ключа (как у вас не было), то я полагаю, что ваше приложение может зависнуть, если вы не поймаете выбрасываемое исключение. Код, который я разместил выше, не приведет к зависанию вашего приложения, поэтому, если оно все еще зависает, это по какой-то другой причине. Если этот ответ решит вашу проблему, примите его. - person Kevin Holditch; 03.10.2011

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

person Rami Alshareef    schedule 03.10.2011
comment
Можете ли вы отладить или он сейчас в производстве? - person Rami Alshareef; 03.10.2011
comment
когда я перезапускаю службу, проблема исчезает, теперь я могу добавлять объекты без зависаний. Для отладчика тестирования, не нажимающего сам SatisfyGRs - person user972380; 03.10.2011