字符串比较和单个字符的字母顺序

我有一个与字符串比较和字符比较有关的问题。

字符>0 (零)相应地具有以下十进制值6248

当我比较以下代码中的两个字符时,我得到值True (这是正确的)

 Console.WriteLine('>' > '0'); 

当我在下面的代码中比较两个单字符字符串时,我得到值-1 ,表示“>”小于“0” (默认文化是英语)

 Console.WriteLine(string.Compare(">", "0")); 

而以下代码中“3”和“1”( 5149代码值)的比较返回1 (如预期的那样)

 Console.WriteLine(string.Compare("3", "1")); 

另外, string.Compare(string str1, string str2)文档说:

比较使用当前文化来获取特定于文化的信息,例如套管规则和单个字符的字母顺序

您是否能够解释(或提供一些文档的参考)如何实现字符串比较,例如如何计算单个字符的字母顺序等?

比较字符'>''0' ,您正在比较它们的序数值。

要从字符串比较中获得相同的行为,请提供序数字符串比较类型:

  Console.WriteLine(string.Compare(">", "0", StringComparison.Ordinal)); Console.WriteLine(string.Compare(">", "0", StringComparison.InvariantCulture)); Console.WriteLine(string.Compare(">", "0", StringComparison.CurrentCulture)); 

默认情况下使用当前文化,其具有排序顺序,用于按字母顺序对字符串进行排序,而不是按严格的词汇顺序排序,以按字母顺序定义。

字符串的排序顺序取决于您使用的文化。

StringComparer.CurrentCulture在我的机器上按如下方式对以下1个字符的字符串进行排序:

 ' - ! " # $ % & ( ) * , . / : ; ? @ [ \ ] ^ _ ` { | } ~ + < = > 0 1 2 3 4 5 6 7 8 9 a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z 

StringComparer.Ordinal对相同的字符串进行排序,如下所示:

  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ ABCDEFG HIJKLMNOPQRSTUVWXYZ [ \ ] ^ _ ` abcdefghijklmno pqrstuvwxyz { | } ~ 

听起来你想要的是不使用文化特定规则的比较。 你试过StringComparison.Ordinal:

 Console.WriteLine( string.Compare( ">", "0", StringComparison.Ordinal ) ); // returns a positive number 

它返回-1因为它将str2str1进行比较,而不是相反。 例如,“48等于62”。 不,它小于62因此它返回-1。 当您阅读参数顺序时,它在语义上有点混乱