我有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),则保留订单。
发生了什么?
提前致谢。
答案 0 :(得分:4)
如果您使用序数比较,您将获得正确的结果。
原因是序数比较通过评估字符串对象中每个字符的数值来起作用,因此插入空格没有区别。
如果您使用其他类型的比较,则还涉及其他事项。来自文档:
使用单词排序规则的操作会执行区分文化的操作 比较,其中某些非字母数字Unicode字符可能 分配给他们的特殊权重。使用单词排序规则和 特定文化的惯例,连字符(“ - ”)可能有一个非常 分配给它的小重量使得“coop”和“co-op”出现在旁边 彼此在排序列表中。
使用序数排序规则的操作根据每个Char的数值(Unicode代码点)执行比较。 串。序数比较快但对文化不敏感。什么时候 您使用序数排序规则来排序以Unicode开头的字符串 字符(U +),字符串U + xxxx在字符串U + yyyy之前 xxxx的值在数值上小于yyyy。
答案 1 :(得分:2)
来自MSDN:
比较使用当前文化来获取特定于文化的信息,例如套管规则和单个字符的字母顺序。例如,文化可以指定某些字符组合被视为单个字符,或者以特定方式比较大写和小写字符,或者字符的排序顺序取决于其前面或后面的字符。 / p>
比较字符串时,应调用Compare(String,String,StringComparison)方法,该方法要求您明确指定方法使用的字符串比较类型。
它表明存在一些文化问题,这意味着最后一个空格改变了两者的排序顺序。