【问题标题】:C# String Comparison? [duplicate]C#字符串比较? [复制]
【发布时间】:2011-05-18 03:29:34
【问题描述】:

可能的重复:
Using == or Equals for string comparison
Are string.Equals() and == operator really same?

我首先学习了 Java,并且为数不多的绝对原则之一是您永远不会使用 == 来比较两个字符串是否相等,而是使用 equals 方法。所以当我几年前接触 C# 并注意到对象仍然有一个 Equals 方法时,我认为该规则仍然适用。

现在我正在查看一位前同事的代码,我发现到处都是这样的 sn-ps:

if (s.Substring(0, s.IndexOf("_")) == "GBCI") {...}

如果我没记错的话,== 将比较这两个结果之间的地址,并且由于前半部分是由函数返回的,因此这将失败,因为结果与右侧的常量地址不同。

我是否坚持旧的 Java 习惯?还是我的同事不在身边是件好事?

附:无论您对比较字符串的回答如何,我确实意识到将上述内容表述为s.BeginsWith("GBCI") 会更好,但这完全是另一回事。

【问题讨论】:

  • 关于 PS。如果 (s.BeginsWith("GBCI_") == true)。这好多了。
  • 甚至if (s.BeginsWith("GBCI_"))
  • 我更喜欢 BoltClock 的方式。如果它返回一个布尔值,为什么要将它与一个布尔值进行比较以获得另一个布尔值? 'x == true' 行将返回与简单的 'x' 完全相同的东西(当然,x 是布尔值)
  • 哦,我看到你改变了什么,主要是常量字符串中的 _ 。我当然明白为什么你认为它应该在那里,但你不知道(我也不会为此责备你)下划线并不重要。有问题的字符串以 GBCI 或 CSB 开头,只需要找出哪个。

标签: c# string


【解决方案1】:

在 C# 中,== 字符串比较比较它们的值而不是它们的引用。详情请见this section of the C# spec

所以像这样使用它可以正常工作;你的同事神志清醒。

【讨论】:

    【解决方案2】:

    另外,请查看this 链接。

    您可以使用==,但compareTo 的独特之处在于它会根据字符串的不同(或不不同)返回一个整数。

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 2018-07-09
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 2017-11-19
      • 2021-11-19
      相关资源
      最近更新 更多