为什么.NET按照ASCII table中显示的顺序或SQL排序方式对字符'+'和'^'进行排序。
在ASCII table中,'+'的值为42,而'^'的值为94但是如果你运行这样的代码:
var list = new List<string> { "+", "^", "!" };
list.Sort();
列表将按以下顺序包含值:
{“!”,“^”,“+”}
LINQ排序生成相同的结果。有人能告诉我.NET的用途是什么吗?
答案 0 :(得分:17)
.NET不使用ASCII,它使用Unicode。执行字符串排序时,.NET(默认情况下)使用当前区域性的排序规则。在这种情况下,这些规则表明“^”出现在“+”之前。您可以使用“序数”字符串比较器获得您期望的结果:
var list = new List<string> { "+", "^", "!" };
list.Sort(StringComparer.Ordinal); // Order is "!", "+", "^"
答案 1 :(得分:2)
这是由CompareInfo属性中定义的当前文化集定义的。每种文化都有针对字符串的特定文化排序规则。