8

为什么 .NET 对字符“+”和“^”进行排序的顺序与它们在ASCII 表中出现的顺序或 SQL 对它们的排序方式不同。

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

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

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

{ "!", "^", "+" }

LINQ 排序生成相同的结果。有人能告诉我 .NET 是做什么的吗?

4

2 回答 2

17

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

var list = new List<string> { "+", "^", "!" };
list.Sort(StringComparer.Ordinal); // Order is "!", "+", "^"
于 2012-06-14T17:38:20.870 回答
2

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

于 2012-06-14T17:39:25.747 回答