.Net中的字符串比较:"+"vs" - "

jms*_*ter 14 .net c# string compare

根据当前的文化,我总是假设.Net按字典顺序比较字符串.但是当其中一个字符串以' - '结尾时,有一些奇怪的事情:

"+".CompareTo("-")
Returns: 1

"+1".CompareTo("-1")
Returns: -1
Run Code Online (Sandbox Code Playgroud)

我得到了我尝试的所有文化,包括不变的文化.任何人都可以解释发生了什么,我怎样才能获得当前语言环境的一致字符排序?

Ant*_*lev 10

尝试将此更改为

string.Compare("+", "-", StringComparison.Ordinal); // == -2
string.Compare("+1", "-1", StringComparison.Ordinal); // == -2
Run Code Online (Sandbox Code Playgroud)


Luk*_*keH 7

对于任何特定的语言环境,不一定有一致的逐字符排序.

MSDN文档:

例如,文化可以指定某些字符组合被视为单个字符,或者以特定方式比较大写和小写字符,或者字符的排序顺序取决于其前面或后面的字符.

确保一致的逐字符排序的唯一方法是使用序数比较,如Anton的答案所示.