在字典中添加显示错误的项目:已添加具有相同键的项目。字典

时间:2012-02-23 11:03:26

标签: c# asp.net dictionary

我正在尝试

   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 个答案:

答案 0 :(得分:1)

您必须尝试使用​​Containskey并在添加之前进行过滤。

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

答案 1 :(得分:1)

Dictionary.Add(…)按此顺序选择keyvalue,并希望密钥是唯一的。

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

答案 2 :(得分:1)

假设#1:

您可以将字典命名为“列表”,这表示您没有使用字典来表示它的用途,而应该使用List<T>代替。

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

所以,如果你真的想创建一个元组集合,其中第一个值总是“@ReturnValue”而第二个值是SqlCommand,那么你应该使用类似IDList[i]的东西。 / p>

示例:

List<Tuple<int, int>>

假设#2:

实际上, 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; 值(同样,顾名思义)是唯一值,即您的密钥,而您只是错误地使用IDList[i]参数。