>我有 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)
如果我插入其他字符(例如 _ x(,则顺序会保留。
这是怎么回事?
提前谢谢。
如果使用序数比较,您将获得正确的结果。
原因是序号比较通过计算字符串对象中每个字符的数值来工作,因此插入空格不会有任何区别。
如果您使用其他类型的比较,则涉及其他内容。从文档中:
使用单词排序规则的操作执行区分区域性 比较,其中某些非字母数字 Unicode 字符可能 为他们分配了特殊的权重。使用单词排序规则和 特定区域性的约定,连字符 ("-"( 可能具有非常 分配给它的权重较小,以便"coop"和"co-op"显示在 彼此在排序列表中。
使用序号排序规则的操作根据 字符串。序号比较速度很快,但不区分区域性。什么时候 使用序号排序规则对以 Unicode 开头的字符串进行排序 字符 (U+(,字符串 U+xxxx 在字符串 U+yyyy 之前,如果 XXXX 的值在数值上小于 yyyy。
来自 MSDN:
比较使用当前区域性来获取特定于区域性的信息,例如大小写规则和各个字符的字母顺序。例如,区域性可以指定将某些字符组合视为单个字符,或者以特定方式比较大写和小写字符,或者字符的排序顺序取决于其前面或后面的字符。
比较字符串时,应调用 Compare(String, String, StringComparison( 方法,该方法要求显式指定该方法使用的字符串比较类型。
这表明存在一些文化问题,这意味着最后一个空格改变了两者的排序顺序。