OrderBy如何处理C#中的字符串?

时间:2014-03-27 22:11:07

标签: c# linq

考虑这段代码

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,这里发生了什么?

3 个答案:

答案 0 :(得分:11)

您使用的订单depends on the culture

您可以将重载中的文化传递给OrderBy。

var sorted = strings2.OrderBy(x => x, StringComparer.InvariantCulture)

答案 1 :(得分:7)

你走了:

  

比较使用当前的文化来获得特定文化   套管规则和字母顺序等信息   个人角色。例如,文化可以指定   某些字符组合被视为单个字符,   或者以特定方式比较大写和小写字符,   或者字符的排序顺序取决于字符   在它之前或之后。

Source: String.Compare Method on MSDN

答案 2 :(得分:5)

&#34; .OrderBy&#34; function使用字符串的默认比较器。该比较器不一定会返回基于ASCII码的排序顺序。

有关所有不同字符串比较器的列表,请参阅MSDN上的文章。