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