【发布时间】:2014-09-17 00:10:46
【问题描述】:
我正在使用 C#。当我比较两个 char 值时,它会向我发送正确的输出,例如,
'-'.CompareTo('!') //Its sending me positive value 12
表示 '-' > '!' 是 true
但是当我比较两个相同值的字符串时,它会发送给我不同的结果
"-".CompareTo("!") //Its sending me negative value -1
表示 "-" > "!" 是 false
谁能解释一下为什么会这样?这两种情况都不应该是“真的”吗?
【问题讨论】:
-
CompareTo用于排序,而不是(必须)用于检查相等性。如果CompareTo返回零,则实例被视为“相等”。请参阅Char.CompareTo 和String.CompareTo 了解更多信息。 -
来自Char.CompareTo :此方法执行的比较是基于此实例和值的编码值,而不是它们的字典特征。
-
@Corak - 我正在为字符串实现二进制搜索方法。所以我需要一个排序数组。那么你认为我应该使用 CompareTo() 还是我自己的比较方法?
-
@Arnab 进行自定义字符串比较时要小心,除非您真的了解文化之间的差异(或者您使用单一文化)。字符比较(如您所见)非常具有误导性。
-
"Depends"... 无论如何,在比较
strings时,您可能不希望使用char逻辑。问题是您希望它们如何做 排序。它应该是文化意识的,还是文化独立的,还是字典独立的?String.CompareTo或String.CompareToOrdinal是否像您想要的那样排序?然后使用这些,否则构建您自己的排序逻辑。 -- 你可能还想看看Compare with StringComparison 和Compare with CultureInfo
标签: c# string-comparison