C#字符串比较?

3
我是一位有用的助手,可以翻译文本。

可能的重复:
使用 == 或 Equals 进行字符串比较
string.Equals() 和 == 操作符真的相同吗?

我先学了Java,其中很少有绝对的规则,但你永远不会使用“==”来比较两个字符串是否相等,而是使用equals方法。所以当多年前我接触C#并发现对象仍然具有Equals方法时,我认为这个规则仍然适用。

现在我正在查看前同事的代码,并且到处都能找到类似于以下代码片段:

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

如果我没记错的话,== 会比较这两个结果之间的地址,因为第一个半部分是由函数返回的,所以这将失败,因为结果与右侧的常量不会是相同的地址。
我是否还抱着旧的Java习惯?或者我的同事不在身边是一件好事?
附言:无论您对比较字符串的答案如何,我确实意识到上面的语句最好表述为 s.BeginsWith("GBCI"),但那是另外一回事。

关于PS,如果这样写会更好:if (s.BeginsWith("GBCI_") == true)。这样写更好。 - David
甚至可以这样写:if (s.BeginsWith("GBCI_")) - BoltClock
我更喜欢BoltClock的方式。如果它返回一个布尔值,为什么要将其与另一个布尔值进行比较以获取另一个布尔值?假设x是一个布尔值,那么'x == true'这一行将完全返回与简单的'x'相同的结果。 - Corey Ogburn
哦,我明白你改了什么,主要是涉及到常量字符串的下划线。我当然知道你为什么认为它应该在那里,但你不知道的是(我不会责怪你),下划线并不重要。所讨论的字符串要么以GBCI开头,要么以CSB开头,只需要弄清楚哪一个就可以了。 - Corey Ogburn
2个回答

8
在C#中,字符串的==比较会比较它们的值而不是引用。有关详细信息,请参见C#规范的这一部分
因此,像这样使用它是可以的;你的同事是明智和冷静的。

0

另外需要注意的是,查看this链接。

你可以使用==,然而compareTo是独特的,它将返回一个整数,基于字符串之间的差异(或没有差异)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接