c# - C# 中错误的字符串排序

标签 c# string linq currentculture stringcomparer

我运行了这个:

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/

相关文章:

c# - 在 NetworkCredentials 中提供用户名和密码时,.net 中的 HttpClient 发出 2 个请求

c++ - 检查输入是C++中的数字还是字符串

c# - List<T> FirstOrDefault() 性能不佳 - 在这种情况下可以使用字典吗?

.net - LINQ to SQL/LINQ to Collections 性能

c# - 如何将十六进制值解析为一个单位?

c# - 如何以编程方式构造对象引用?

arrays - 如何从c中的字符串数组中删除重复的字符串

java - 在最近的单词边界截断字符串

c# - 已尝试附加或添加不是新实体,可能是从另一个 DataContext 加载的

c# - 解析 Linq.Expressions.NewExpression?