首页 > 解决方案 > C# 字符串数组 orderBy 重音字符问题

问题描述

我写了一个小代码来声明一个字符串数组,我尝试使用和不使用stringCompare对其进行排序,但结果总是相同的。

使用我使用cultureInfo的StringComparer:

var strings = new string[] { "asd", "ásd", "álm", "alm" };
var ci = CultureInfo.GetCultureInfo("hu");
var comp = StringComparer.Create(ci, false);
Console.WriteLine(string.Join(", ", strings.OrderBy(item => item, comp)));

没有 StringComparer:

var strings = new string[] { "asd", "ásd", "álm", "alm" };
Console.WriteLine(string.Join(", ", strings.OrderBy(item => item)));

两个结果都是:

alm, álm, asd, ásd

但正确的结果将是:

alm, asd, álm, ásd

我做错了什么?

标签: c#arraysstringlinq

解决方案


您可以只使用Ordinal字符串比较

var strings = new[] { "asd", "ásd", "álm", "alm" };
Console.WriteLine(string.Join(", ", strings.OrderBy(item => item, StringComparer.Ordinal)));

它给你

alm, asd, álm, ásd


推荐阅读