SortedDictionary ArgumentException:“Æ”和“AE”被认为是相同的键

时间:2015-05-27 08:41:14

标签: c# .net dictionary unique sorteddictionary

我试图使用SortedDictionary从文件中存储我的一些数据,但却得到了一堆奇怪的关键重复异常。我想出了下一个代码示例,它重现了我的问题:

var dict = new SortedDictionary<string, string>();
dict.Add("Æ", "qwerty"); // "aesc" (aka "ash"), single symbol
Console.WriteLine(dict["AE"]); // outputs "qwerty" for two-symbol string "AE"
dict.Add("AE", ""); // ArgumentException: An entry with the same key already exists.

This code on .NET Fiddle

虽然普通词典没有发生,但我最终决定使用它。但我仍然想知道为什么它是一个排序的问题?不幸的是,我自己无法得到答案(得到了很多与AES相关的噪音)并且无法调试到SortedDictionary的代码,尽管MS最近开放了一些.NET源代码。

这个类似乎隐含地运行了一些字符串预处理/规范化函数,但我简直不敢相信它是一个真正的原因。

任何想法为什么会发生?提前谢谢!

1 个答案:

答案 0 :(得分:5)

这是因为文化。例如,尝试new SortedDictionary(StringComparer.Ordinal)

字典表现不同的原因是它使用EqualityComparer<TKey>.Default而SortedDictionary使用Comparer<TKey>.Default