C# 奇怪字符串排序

C# 奇怪字符串排序,c#,C#,我在c中遇到了一个奇怪的字符串列表排序: 它实际上导致: a_ a0 as 有人能帮我理解为什么的ASCII值为95,0的ASCII值为48,a在a0之前被排序吗?默认情况下,字符串是使用CurrentCulture排序算法排序的 使用StringComparer.Ordinal按Unicode(非ASCII)码点对字符串进行排序 List<String> list = ... list.Sort( comparer: StringComparer.Ordinal ); List

我在
c
中遇到了一个奇怪的字符串列表排序:

它实际上导致:

a_
a0
as

有人能帮我理解为什么
的ASCII值为95,
0的ASCII值为48,
a
a0
之前被排序吗?

默认情况下,字符串是使用
CurrentCulture
排序算法排序的

使用
StringComparer.Ordinal
按Unicode(非ASCII)码点对字符串进行排序

List<String> list = ...
list.Sort( comparer: StringComparer.Ordinal );
List=。。。
排序(比较器:StringComparer.Ordinal);

这并不奇怪,有很多因素在起作用。这方面的例子还有互联网,您研究过它们吗?取决于所选的排序算法及其数据内容。ASCII是如何体现在这一点上的?@RobertHarvey OP明确提到了字符的ASCII值-我提到过它是按Unicode代码点而不是ASCII值排序的,以提醒大家.NET在内部使用UTF-16(尽管前128个ASCII字符和UTF-16的整数值相同)。Unicode的前128个代码点与ASCII字符相同,顺序相同。因此,如果保证文本仅为ASCII字符,这将起作用。
a_
a0
as
List<String> list = ...
list.Sort( comparer: StringComparer.Ordinal );