“具有相同密钥的项目”异常;带有枚举键的字典

问题描述:

我有一个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

如果你的枚举的多个成员具有相同的数字表示,将导致异常。

+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

默认情况下,枚举的数字表示增量,所以除非您指定重复值,否则不应该有任何值。

尝试用你的枚举运行下面的替换T,看看是否有任何值冲突。

return Enum.GetValues(typeof(T)); 

如果不是,那么我看到的唯一选择是您使用枚举作为键两次。