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



考虑以下代码

var strings2 = new List<string>
    {
        "0", // Ascii code 48 (decimal)
        "|"  // Ascii code 125 (decimal)
    };
var sorted = strings2.OrderBy(x => x).ToArray();

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

顺序取决于您使用的区域性。

可以在重载中将区域性传递给OrderBy。

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

给你:

比较使用当前区域性来获取特定于区域性的内容的大小写规则和字母顺序等信息单个字符。例如,文化可以指定某些字符的组合被视为单个字符,或者大写字母和小写字母以特定的方式进行比较,或者字符的排序顺序取决于字符本身

来源:字符串。MSDN的比较方法

函数对字符串使用默认比较器。比较器不一定会返回基于ASCII码的排序顺序。

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

相关内容

  • 没有找到相关文章