2012-02-23 96 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的任何結果相同,您的代碼將失敗。

相關問題