use*_*740 3 c# string ienumerable compare ordinal
我发现了一个由String.CompareTo和二进制搜索引起的错误(在我的代码中),因为我的自定义IComparer(用于包装类型)使用String.Compare(x, y, StringComparison.Ordinal).
这是因为items.OrderBy(i => i.Name)(其中Name是string类型)用于构建要搜索的Array,所以使用字符串对象本身作为IComparable - 并且具有不同的规则:
比较使用当前文化来获取特定于文化的信息,例如套管规则和单个字符的字母顺序.例如,文化可以指定某些字符组合被视为单个字符,或者以特定方式比较大写和小写字符,或者字符的排序顺序取决于其前面或后面的字符.
例如,{A,b,C} [A, b, C]与OrderBy-using-Default-String-Compare 一样排序,但应按顺序[b, A, C]进行比较 - 因为它不是,二进制搜索失败.
现在,随着"背景"的出现,
什么是最简单的(例如,没有为字符串实现自定义IComparer)的方式来订购具有与字符串属性相同的对象String.Compare(.., StringComparison.Ordinal)?
编辑:我[刚刚意识到我]可以,也许应该,只是使用OrderBy(x => x, theSameComparer)- 但假设这是不可能的,OrderBy如何使用相同的结果?
有一个StringComparer适用的预建StringComparison.Ordinal- 那是StringComparer.Ordinal:
items.OrderBy(i => i.Name, StringComparer.Ordinal)
Run Code Online (Sandbox Code Playgroud)