2012-02-23 92 views
0

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

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; 

当我ADDI 2倍的值没有错误,但第三次则显示错误

an item with the same key has already been added. dictionary

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

+0

这个关于Dictionary或about Cmd.Parameters [“@ ReturnVal”]的问题。值? – 2012-02-23 11:09:15

+2

您确定'Convert.ToInt32(Cmd.Parameters [“@ ReturnVal”]。Value.ToString())'不会获取相同的值吗? – 2012-02-23 11:10:03

+0

ya它将检索相同的值一段时间,并且一些时间唯一值 – Rocky 2012-02-23 11:20:41

回答

1

假设1:

你的名字你的词典“列表”,这表明,你是不是用字典什么是换货,应该可能会被使用,而不是List<T>

字典要求每个键(第一参数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()参数错误的方法。

+0

当我尝试使用list.Add( Tuple.Create(Convert.ToInt32(Cmd.Parameters [“@ ReturnVal”]。Value),IDList [ i]) ); 我得到一个错误没有超载的方法添加需要1个参数。 我需要添加别的东西,请给我解释,因为我没有使用元组 – Rocky 2012-02-23 11:28:07

+0

你需要使用'List >'作为你的类型,正如我在我的回答中指出的那样。我已经澄清了这个例子。 – 2012-02-23 11:33:33

+0

哦,请注意'Tuple'类需要.NET 4.0。但是从你描述的错误来看,我认为你正在使用它。 – 2012-02-23 11:34:24

1

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

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

Dictionary.Add(…)需要key,并按照该顺序value,并期望键是唯一的。

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

相关问题