我发现了一个由 String.CompareTo 和二进制搜索导致的错误(在我的代码中),因为我的自定义 IComparer(用于包装类型)使用 String.Compare(x, y, StringComparison.Ordinal)

这是因为用于构建要搜索的 Array 的 items.OrderBy(i => i.Name)(其中 Name 是字符串类型)使用字符串对象本身作为 IComparable - 这有不同的规则:



例如,{A, b, C} 被排序为 [A, b, C] 与 OrderBy-using-Default-String-Compare 但应该是 [b, A, C] 根据序数比较 - 因为它不是,二进制搜索失败。

现在,随着“上下文”的消失,

使用与 String.Compare(.., StringComparison.Ordinal) 相同的字符串属性对对象进行排序的最简单方法是什么(例如,不为字符串实现自定义 IComparer)?

编辑:我 [刚刚意识到我] 可以,而且可能应该,只使用 OrderBy(x => x, theSameComparer) - 但假设这是不可能的,OrderBy 如何用于相同的结果?

最佳答案

有一个应用 StringComparer 的预构建 StringComparison.Ordinal - 即 StringComparer.Ordinal :

items.OrderBy(i => i.Name, StringComparer.Ordinal)

10-08 02:18