我运行了这个:
void Main()
{
List<string> strings = new List<string>{"aaa", "z", "a"};
Console.WriteLine(string.Join("\n", strings.OrderBy(k => k)));
}
输出是:
a
z
aaa
这不可能是对的!我期待着
a
aaa
z
可能是什么问题?
最佳答案
我已经意识到 OrderBy
使用当前语言环境对字符串进行排序。在我的示例中,语言环境是丹麦语,其中“aa”位于“z”之后,因为它代表字母“å”,它附加在字母表的末尾。
这让我很吃惊,因为我期待英语排序,但我没有意识到语言环境一直是丹麦语;我系统上的许多其他设置都设置为英语,包括语言。这让我的预期错了。
要获得我期望的顺序,将 StringComparer.InvariantCulture
传递给 OrderBy
就足够了:
void Main()
{
List<string> strings = new List<string>{"aaa", "z", "a"};
Console.WriteLine(string.Join("\n", strings.OrderBy(k => k, StringComparer.InvariantCulture)));
}
输出:
a
aaa
z
关于c# - C# 中错误的字符串排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33420921/