.NET如何排序特殊字符?

为什么.NET按照与ASCII表中显示的顺序不同的顺序对字符“+”和“^”进行排序,或者对SQL进行排序。

在ASCII表中, “+”的值为42,“^”的值为94但是如果运行如下代码:

var list = new List { "+", "^", "!" }; list.Sort(); 

该列表将按以下顺序包含值:

{“!”,“^”,“+”}

LINQ排序生成相同的结果。 有人能告诉我.NET的类型吗?

.NET不使用ASCII,它使用Unicode。 执行字符串排序时,.NET(默认情况下)使用当前区域性的排序规则。 在这种情况下,这些规则表明“^”出现在“+”之前。 您可以使用“序数”字符串比较器获得您期望的结果:

 var list = new List { "+", "^", "!" }; list.Sort(StringComparer.Ordinal); // Order is "!", "+", "^" 

这由CompareInfo属性中定义的当前文化集定义。 每种文化都有特定于文化的字符串排序规则。