Fra*_*ank 11 c# string-comparison
我在C#中很新,我在字符串比较中发现了一些我不太懂的东西.
有人可以解释一下为什么字符之间的比较给出了与下面代码中一个字符长度字符串的比较相反的结果吗?
我预计这"9" < "="将是true(因为'9'(57)的unicode代码比'='(61)的unicode代码少但是它是假的...后面的字符串的比较逻辑是什么,为什么它不同于比较字符?
码:
bool resChComp = '9' < '=';
bool resStrComp = String.Compare("9", "=") < 0;
Console.WriteLine($"\n'9' < '=' : {resChComp}, \"9\" < \"=\" : { resStrComp }");
Run Code Online (Sandbox Code Playgroud)
输出:
'9' < '=' : True, "9" < "=" : False
Run Code Online (Sandbox Code Playgroud)
默认的字符串比较是进行"单词排序".从文档中,
.NET Framework使用三种不同的排序方式:单词排序,字符串排序和顺序排序.单词排序执行文化敏感的字符串比较.某些非字母数字字符可能会分配特殊权重.例如,连字符(" - ")可能具有非常小的权重,因此"coop"和"co-op"在排序列表中彼此相邻.字符串排序类似于单词排序,除了没有特殊情况.因此,所有非字母数字符号都在所有字母数字字符之前.序数排序根据字符串的每个元素的Unicode值比较字符串.
您期望的比较是序数比较,您可以通过StringComparison.Ordinal在String.Compare重载中使用,如下所示:
bool resStrComp = String.Compare("9", "=", StringComparison.Ordinal) < 0;
Run Code Online (Sandbox Code Playgroud)
这将通过使用它们的unicode值来比较字符串,就像将字符与另一个字符进行比较一样.