我发现了一个由String.CompareTo和二进制搜索产生的错误(在我的代码中),因为我的自定义 IComparer (用于包装类型)使用String.Compare(x, y, StringComparison.Ordinal)
.
这是因为items.OrderBy(i => i.Name)
(其中 Name 是字符串类型)用于构建要搜索的 Array 使用字符串对象本身作为 IComparable - 并且具有不同的规则:
比较使用当前文化来获取特定于文化的信息,例如大小写规则和单个字符的字母顺序。例如,文化可以指定某些字符组合被视为单个字符,或以特定方式比较大小写字符,或者字符的排序顺序取决于其前面或后面的字符。
例如,{A, b, C}[A, b, C]
与 OrderBy-using-Default-String-Compare 一样排序,但应该[b, A, C]
按照 Ordinal 比较 - 因为它不是,所以二分查找失败。
现在,有了“上下文”,
什么是最简单的(例如,没有为字符串实现自定义 IComparer)方法来对具有与字符串属性相同的对象进行排序String.Compare(.., StringComparison.Ordinal)
?
编辑:我 [刚刚意识到我] 可以而且可能应该只使用OrderBy(x => x, theSameComparer)
- 但假设这是不可能的,如何使用 OrderBy 来获得相同的结果?