2012-02-21 108 views
2

我有一個Dictionary<TKey,TValue>,我插入了大量數據。鍵是一個枚舉。我一直得到這個例外:「具有相同密鑰的項目」異常;帶有枚舉鍵的字典

具有相同密鑰的項目已被添加。

但我不看到任何愚弄,但我懷疑我的一些枚舉值相同。會導致重複鍵錯誤?我認爲枚舉是一種特殊類型,所以它的價值無關緊要。

這個例外不是很有幫助......它並沒有告訴我哪個鑰匙正在跳動。我正在使用一個初始化列表。


編輯:使用了一些正則表達式魔術到我的初始化列表轉換成單獨的.Add電話。找到了密鑰,但我仍然沒有看到這個騙局......

+0

只是問一個明顯的問題:你能夠調試它的視覺工作室嗎?如果沒有,可以在字典添加操作之前創建額外的檢查,以查看密鑰是否已經存在,並且添加更多有用的異常(如果存在)。 – lzcd 2012-02-21 05:12:21

+0

@lzcd:嗯,我無法使用初始化列表。我把它分解後,它給了我一條線#。 – mpen 2012-02-21 05:15:39

+0

枚舉中有多少個值?數字值是否明確指定或保留默認值?它是[Flags]枚舉嗎?正如下面的Pavel所說,enum只是一個int(默認情況下)或幕後的另一個nunmeric數據類型,所以有時候不同的值(或Flags枚舉中的組合)可以解析爲相同的數字。 – 2012-02-21 05:17:03

回答

5

如果你的枚舉的多個成員具有相同的數字表示,將導致異常。

+0

Bahh ..好吧。我創建了一個大約256枚枚舉鍵的列表,並且我還沒有對它們進行編號,所以它會自動分配它們。我認爲必須將自動分配給我明確分配的一個。 – mpen 2012-02-21 05:15:18

+0

嘗試輸出'Enum.GetValues(typeof(yourEnum))'結果到控制檯,看看是否有重複 – 2012-02-21 05:17:34

+0

是的,我現在找到了愚蠢。一次只能經歷一次。謝謝! (必須等10分鐘才能接受你的回答) – mpen 2012-02-21 05:42:49

1

默認情況下,枚舉的數字表示增量,所以除非您指定重複值,否則不應該有任何值。

嘗試用你的枚舉運行下面的替換T,看看是否有任何值衝突。

return Enum.GetValues(typeof(T)); 

如果不是,那麼我看到的唯一選擇是您使用枚舉作爲鍵兩次。

相關問題