【发布时间】:2011-07-31 05:33:10
【问题描述】:
我正在创建一个 Dictionary 对象,使用IEnumerable 的ToDictionary() 扩展方法:
var dictionary = new Dictionary<string, MyType>
(myCollection.ToDictionary<MyType, string>(k => k.Key));
当它执行时,它会抛出以下ArgumentException:
已添加具有相同密钥的项目。
如何让它告诉我重复键是什么?
【问题讨论】:
-
这不是您问题的答案,但 ToDictionary 实际上创建了一个字典。你为什么将该字典传递给另一个字典的构造函数?为什么要指定您不必指定的泛型类型参数?我会把你的例子写成:
var dictionary = myCollection.ToDictionary(x => x.Key); -
1.因为这是 Dictionary 的构造函数重载之一。但你说得有道理。
-
2.据推测,指定类型消除了装箱的任何可能性,但我不确定。
-
这可能不是理想的方法,但您可以捕获 ArgumentException 并将其作为新异常重新抛出,并提供更多信息,例如密钥,原始异常是这个新异常的内部异常。
-
@Robert - 编译器推断出泛型类型参数 - 如果不能,它会让你知道。在这种情况下,
foo.ToDictionary(...)和foo.ToDictionary<MyType, string>(...)编译为完全相同的 IL 代码,只是需要更少的输入。
标签: c# dictionary duplicates