【问题标题】:String comparison in .NET.NET 中的字符串比较
【发布时间】:2024-01-31 08:40:01
【问题描述】:

(.NET)之间有什么区别(以 bref 表示)

myString == otherString

myString.CompareTo(otherString) == 0

【问题讨论】:

标签: c# .net vb.net string comparison


【解决方案1】:

没有区别,除非 myString 是 null,在这种情况下 myString.CompareTo(otherString) 会引发错误 (NullReferenceException)。另外,使用CompareTo== 慢一点。

仅当您想知道一个字符串在按字母顺序排序时是在另一个字符串之前还是之后时,才使用CompareTo。例如,"Car".CompareTo("Cat") 返回 -1,因为按字母顺序排序时,“Car”在“Cat”之前。

【讨论】:

  • 我更喜欢在字母比较大小写中使用带参数的排序...(区分大小写等)
【解决方案2】:

CompareTo 应该用于评估排序。出于某种原因,两个字符串可能出于排序目的比较相同,但不应被视为相等(即==Equals 可能返回false)。

引用documentation

将此实例与指定对象或字符串进行比较,并返回一个整数,指示此实例在排序顺序中是在指定对象或字符串之前、之后还是出现在相同位置

添加了重点 - 请注意,它确实说这两个对象是相等的。

【讨论】:

    【解决方案3】:

    假设你的意思

    myString == otherString
    

    没有明显的区别。

    【讨论】:

      【解决方案4】:

      假设您的意思是 == 而不是 =

      CompareTo 实现了 IComparable 接口。它返回一个整数。

      【讨论】:

      • 我知道它返回一个整数,因为与 "0" 相比)
      • Right and == 返回一个布尔值...这是不同的(你问的是什么)。
      【解决方案5】:

      来自here

      CompareTo 方法主要设计用于排序或 字母顺序操作。不应该在初级时使用 方法调用的目的是判断两个字符串是否 相等的。要确定两个字符串是否等价,请调用 等于方法。

      Equals 方法更合适。从here 来看,Equals== 的区别在于Equals 要求其参数为非空,而== 则不需要。另外,== 被实现为使用Equals,因此Equals 将始终具有更好的性能。

      【讨论】:

      • 我没有将 Equals 与 == 进行比较,但我相信编译器会优化两者,所以我不相信 Equals 和“==”在性能上有所不同。如果 A() 使用 B() 并且只有 B() 我想两者应该具有相同的性能,但是仅使用 A() 你会在编译中损失一些毫秒。
      • 我知道你没有将Equals 与任何东西进行比较。我把它放在那里是为了参考,因为你的问题的标题是“.Net中的字符串比较”。 CompareTo== 没有相同的目的,所以比较 CompareTo== 真的应该只包括注意它们是为不同的东西设计的。就性能而言,您将不得不查看我在链接中引用的内容。 Equals 调用 == 但这并不是它所调用的全部,因此它的性能更差。
      • String.Equals 还允许传入 StringComparison 方法 (msdn.microsoft.com/en-us/library/system.stringcomparison.aspx),这非常有用:)
      【解决方案6】:

      myString.CompareTo(otherString) 方法的主要目的是用于排序或字母排序 操作。当主要目的是检查字符串的相等性时,不应使用它。

      要确定两个字符串是否等价,请调用 Equals 方法。"

      仅在寻找相等性时,最好使用 .Equals 而不是 .CompareTo。因为我也认为编译器比 == 操作更快。

      【讨论】:

        最近更新 更多