Добавление элемента в словарь с ошибкой: элемент с таким же ключом уже добавлен. толковый словарь - PullRequest
0 голосов
/ 23 февраля 2012

Я пытаюсь

   Dictionary<int, int> list = new Dictionary<int, int>();

   for (int i = 0; i < IDList.Count; i++)
   {
     list.Add(Convert.ToInt32(Cmd.Parameters["@ReturnVal"].Value.ToString()), IDList[i]);
   }
   return list;

Когда я добавляю значение дважды, ошибки не возникает, но в третий раз отображается ошибка

элемент с таким же ключом уже добавлен. словарь

Кто-нибудь, пожалуйста, скажите мне, как решить эту проблему.

Ответы [ 3 ]

1 голос
/ 23 февраля 2012

Dictionary.Add(…) принимает key и value в указанном порядке и ожидает, что ключи будут уникальными.

Ваш код завершится ошибкой, если какие-либо результаты из Cmd.Parameters["@ReturnVal"].Value совпадают.

1 голос
/ 23 февраля 2012

Предположение № 1:

Вы называете свой словарь "список", что говорит о том, что вы не используете словарь для того, для чего он предназначен, и, возможно, вместо него следует использовать List<T>.

Словарь требует, чтобы каждый ключ (первый параметр Add()) был уникальным, однако Cmd.Parameters["@ReturnVal"] выглядит подозрительно, как будто это свойство Parameters SqlCommand (или одного из его родительских классов). Если это так, он всегда будет возвращать одно и то же значение в коде, который вы показываете.

Итак, если вы действительно хотите создать коллекцию кортежей, где первое значение всегда равно «@ReturnValue», а второе значение IDList[i], тогда вам следует использовать что-то вроде List<Tuple<int, int>>.

Пример:

  List<Tuple<int, int>> list = new List<Tuple<int, int>>();

  for (int i = 0; i < IDList.Count; i++)
  {
    list.Add(
      Tuple.Create(Convert.ToInt32(Cmd.Parameters["@ReturnVal"].Value), IDList[i])
    );
  }

  return list;

Предположение № 2:

На самом деле, значения IDList[i] (опять же, как следует из названия) являются уникальными значениями, т. Е. Вашими ключами, и у вас просто неправильно заданы параметры Dictionary<TKey,TValue>.Add().

1 голос
/ 23 февраля 2012

Вы должны попробовать с Containskey и фильтровать перед добавлением.

if(!list.ContainsKey(key)
{
    list.Add(value,key);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...