我有一个与字符串比较和字符比较相关的问题 .
字符 >
和 0
(零)具有以下十进制值 62
和 48
.
当我比较以下代码中的两个字符时,我得到值 True
(这是正确的)
Console.WriteLine('>' > '0');
当我在下面的代码中比较两个单字符字符串时,我得到值 -1
,表示">"小于"0"(默认文化是英文)
Console.WriteLine(string.Compare(">", "0"));
以下代码中"3"和"1"( 51
和 49
代码值)的比较返回 1
(如预期的那样)
Console.WriteLine(string.Compare("3", "1"));
另外, string.Compare(string str1, string str2)
文档说:
比较使用当前文化来获取特定于文化的信息,例如套管规则和单个字符的字母顺序
您是否能够解释(或提供一些文档的参考)如何实现字符串比较,例如如何计算个别字符的字母顺序等?
4 回答
比较字符
'>'
和'0'
时,您正在比较它们的序数值 .要从字符串比较中获得相同的行为,请提供序数字符串比较类型:
默认情况下使用当前文化,其具有排序顺序,用于按字母顺序对字符串进行排序,而不是按照严格的词汇顺序排序,以按字母顺序进行某些定义 .
字符串的排序顺序取决于您使用的文化 .
StringComparer.CurrentCulture在我的机器上按如下方式对以下1个字符的字符串进行排序:
StringComparer.Ordinal对如下相同的字符串进行排序:
听起来你想要的是不使用文化特定规则的比较 . 你试过StringComparison.Ordinal:
它返回
-1
,因为它将str2
与str1
进行比较,而不是相反 . 例如,"is 48 equal to 62" . 不,在阅读参数顺序时,它在语义上有点混乱