考虑这段代码
var strings2 = new List<string>
{
"0", // Ascii code 48 (decimal)
"|" // Ascii code 125 (decimal)
};
var sorted = strings2.OrderBy(x => x).ToArray();
已排序包含"|", "0"
。现在考虑一下这段代码(我所做的就是将"|"
更改为"."
)
var strings2 = new List<string>
{
"0", // Ascii code 48 (decimal)
"." // Ascii code 46 (decimal)
};
var sorted = strings2.OrderBy(x => x).ToArray();
现在排序包含".", "0"
在这两种情况下,"0"
即使125> 48,这里发生了什么?
答案 0 :(得分:11)
您使用的订单depends on the culture。
您可以将重载中的文化传递给OrderBy。
var sorted = strings2.OrderBy(x => x, StringComparer.InvariantCulture)
答案 1 :(得分:7)
你走了:
比较使用当前的文化来获得特定文化 套管规则和字母顺序等信息 个人角色。例如,文化可以指定 某些字符组合被视为单个字符, 或者以特定方式比较大写和小写字符, 或者字符的排序顺序取决于字符 在它之前或之后。
答案 2 :(得分:5)
&#34; .OrderBy&#34; function使用字符串的默认比较器。该比较器不一定会返回基于ASCII码的排序顺序。
有关所有不同字符串比较器的列表,请参阅MSDN上的文章。