我正在尝试
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;
当我添加两次值时,没有错误,但第三次显示错误
已添加具有相同键的项目。字典
有人请告诉我如何解决这个问题。
答案 0 :(得分:1)
您必须尝试使用Containskey并在添加之前进行过滤。
if(!list.ContainsKey(key)
{
list.Add(value,key);
}
答案 1 :(得分:1)
Dictionary.Add(…)
按此顺序选择key
和value
,并希望密钥是唯一的。
如果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]
参数。