在字典中添加项时显示错误:已添加具有相同键的项.词典

本文关键字:添加 词典 字典 显示 错误 | 更新日期: 2023-09-27 18:25:28

我正在尝试

   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;

当我添加一个值两次时,没有错误,但第三次显示错误

已添加具有相同键的项目。字典

有人请告诉我如何解决这个问题。

在字典中添加项时显示错误:已添加具有相同键的项.词典

假设#1:

你把你的字典命名为"list",这表明你并不是在使用字典,而是应该使用List<T>

Dictionary要求每个键(Add()的第一个参数)都是唯一的,但Cmd.Parameters["@ReturnVal"]看起来可疑地像是SqlCommand(或其父类之一)的Parameters属性。如果是这样,它将始终在您显示的代码中返回相同的值。

因此,如果你真的想创建一个元组集合,其中第一个值总是"@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()参数。

添加之前,您必须尝试使用Containsky和filter。

if(!list.ContainsKey(key)
{
    list.Add(value,key);
}

Dictionary.Add(…)按照keyvalue的顺序获取密钥,并希望密钥是唯一的。

如果Cmd.Parameters["@ReturnVal"].Value的任何结果相同,则您的代码将失败。