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

SortedDictionary ArgumentException: "Æ" and "AE" considered the same keys

我试图使用 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

虽然通常的词典不会发生这种情况,但我最终决定改用它。但我仍然想知道为什么排序后会出现问题?不幸的是,尽管 MS 最近开放了一些 .NET 源代码,但我自己 google 无法回答(收到很多与 AES 相关的噪音)并且无法调试到 SortedDictionary 的代码。

这 class 似乎隐含地运行了一些字符串 preprocessing/normalization 函数,但我无法相信这是一个真正的原因。

知道为什么会这样吗?提前致谢!

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

Dictionary 行为不同的原因是它使用 EqualityComparer<TKey>.Default 而 SortedDictionary 使用 Comparer<TKey>.Default.