Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于字符串比较的奇怪事情_C#_.net_.net 3.5_.net 4.0 - Fatal编程技术网

C# 关于字符串比较的奇怪事情

C# 关于字符串比较的奇怪事情,c#,.net,.net-3.5,.net-4.0,C#,.net,.net 3.5,.net 4.0,此代码: Console.WriteLine("~".CompareTo("a") > 0); Console.WriteLine('~'.CompareTo('a') > 0); 给我: False True WTF?myChar.CompareTo(otherChar)仅通过unicode值比较两个字符 myString.CompareTo(otherString)使用当前区域性的排序比较器,该比较器可以以更词汇化的方式实现。我认为myStri

此代码:

        Console.WriteLine("~".CompareTo("a") > 0);
        Console.WriteLine('~'.CompareTo('a') > 0);
给我:

False
True
WTF?

myChar.CompareTo(otherChar)
仅通过unicode值比较两个字符


myString.CompareTo(otherString)
使用当前区域性的排序比较器,该比较器可以以更词汇化的方式实现。

我认为
myString.CompareTo(otherString)
返回的值与
CultureInfo.CurrentCulture.CompareInfo.Compare(myString,otherString,CompareOptions.None)
,即,根据文化进行比较

在大多数区域性中,非字母字符排序在字母之前,因此
'~'
'a'
之前


‘char.CompareTo(otherChar)`另一方面,只是比较unicode值(即'a'的97与'~'的126),因此返回不同的结果。

要以与字符相同的方式比较字符串(仅按字符代码的顺序),必须使用顺序比较:

Console.WriteLine(String.Compare("~", "a", StringComparison.Ordinal) > 0);
输出:

True

显示这种行为的另一种方式是:

Console.WriteLine("a".CompareTo("b")); // -1 
Console.WriteLine("b".CompareTo("a")); // 1
Console.WriteLine('a'.CompareTo('b')); // -1 
Console.WriteLine('b'.CompareTo('a')); // 1

Console.WriteLine("~".CompareTo("a")); // -1
Console.WriteLine("a".CompareTo("~")); // 1
Console.WriteLine('~'.CompareTo('a')); // 29
Console.WriteLine('a'.CompareTo('~')); // -29
差别可能很微妙,但确实如此。
Char.CompareTo(Char)
中的比较是

基于 此实例的编码值 和价值,不是他们的词典 特性

同时,for
String.CompareTo(String)

执行一个字(区分大小写和 文化敏感)比较使用 当前文化

即,第一种方法基于顺序进行比较,第二种方法基于当前区域性中的默认规则(您可能在词典中看到的顺序)