C#String.CompareTo不返回我期望的结果

时间:2019-05-01 15:19:44

标签: c# string comparison

我正在尝试比较小于等的字符串-以类似的方式比较数字。

我的问题是以下比较返回true:

var expectThisToBeFalse = "315160".CompareTo("40000") < 0;

我知道我可以将它们作为数字进行比较,但是在我的应用程序中,我不知道它们是数字还是字母。

任何人都可以解释我想念的东西吗,如果有比较有效的方法

例如将显示:

“ 1”小于“ 2”

“ a”小于“ b”

“ aa”大于“ b”

等...

1 个答案:

答案 0 :(得分:6)

您什么都不丢失。您使用的方法按字母顺序比较两个字符串。这意味着如果字符串A在字符串B之前的字母中,则返回-1。

因为您要比较两个字符串,而不是两个数字,所以该函数会查看两个字符串的第一个字符(示例中为“ 3”和“ 4”。因为“ 3”的ASCII码比“ 4”(分别为51和52),该函数得出的结论是,“ 315160”在字母之前比“ 40000”更早,因此返回-1。因为您比较了此函数的结果(- 1)设为0,则变量正确地为true,因为-1 <0。

对于您想要的,您将需要编写自己的函数。我不知道是否已经编写了任何功能。

以后编辑:more info on string.compare

后来编辑2:令我感到有趣的是其他事情:

  

但是在我的应用程序中,我不知道它们是数字还是字母。

对于解决此问题的更简单方法,您可以先检查两个输入是数字还是字母。您会为自己省去很多麻烦,因为有时这两个输入将是数字,解决起来非常容易。