在两个字符串的字符之间插入空格会修改它们的顺序

Phi*_*peC 5 c# sorting

我有2个相同长度的字符串.
我假设(可能错误地)在每个字符串的每个字符之间插入一个空格不会改变它们的顺序.

var e1 = "12*4";  
var e2 = "12-4";  
Console.WriteLine(String.Compare(e1,e2)); // -1 (e1 < e2)

var f1 = "1 2 * 4";  
var f2 = "1 2 - 4";  
Console.WriteLine(String.Compare(f1,f2)); // +1 (f1 > f2)
Run Code Online (Sandbox Code Playgroud)

如果我插入其他字符(例如_ x),则保留顺序.

这是怎么回事 ?

提前致谢.

Jua*_*anR 4

如果您使用序数比较,您将得到正确的结果。

原因是序数比较是通过评估字符串对象中每个字符的数值来进行的,因此插入空格不会产生任何影响。

如果您使用其他类型的比较,则会涉及其他事情。从文档中:

使用单词排序规则的操作执行区域性敏感的比较,其中某些非字母数字 Unicode 字符可能具有分配给它们的特殊权重。使用单词排序规则和特定文化的约定,连字符(“-”)可能会分配一个非常小的权重,以便“coop”和“co-op”在排序列表中彼此相邻出现。

使用序数排序规则的操作根据字符串中每个 Char 的数值(Unicode 代码点)执行比较。序数比较速度很快,但对文化不敏感。当您使用序数排序规则对以 Unicode 字符 (U+) 开头的字符串进行排序时,如果 xxxx 的值在数值上小于 yyyy,则字符串 U+xxxx 位于字符串 U+yyyy 之前。