2011-05-17 115 views
3

可能重複:
Using == or Equals for string comparison
Are string.Equals() and == operator really same?C#字符串比較?

我學會了Java的第一個和幾個絕對之一是,你永遠不使用==來比較兩個字符串是否相等,而不是有等號方法。因此,當我在C#年前登陸並注意到對象仍然具有Equals方法時,我認爲該規則仍然適用。

現在,我要通過一個前同事的代碼,我到處尋找片段是這樣的:

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

如果我沒有記錯,==將地址比較這兩個結果之間和自前半部分由一個函數返回,這將失敗,因爲結果將不會與右側的常量相同。

我堅持使用舊的Java習慣嗎?或者我的同事不在身邊,這是件好事嗎?

P.S.無論你對字符串進行比較的答案如何,我都會意識到上述將會更好地表述爲s.BeginsWith("GBCI"),但這完全是另一回事。

+0

關於PS。這將是如果(s.BeginsWith(「GBCI_」)== true)。這樣好多了。 – David 2011-05-17 19:29:12

+0

甚至'如果(s.BeginsWith(「GBCI _」))' – BoltClock 2011-05-17 19:29:49

+0

我更喜歡BoltClock的方式。如果它返回一個布爾值,爲什麼要比較一個布爾值來獲得另一個布爾值?行'x == true'將返回完全相同的東西,只是'x'(說x是一個布爾當然) – 2011-05-17 19:34:39

回答

8

在C#中,字符串==的比較比較它們的值而不是它們的引用。詳情請參閱this section of the C# spec

因此,使用它就像工作正常;你的同事是清醒而清醒的。

0

另請注意,看看this鏈接。

您可以使用==compareTo是唯一的,它會根據字符串的不同(或不同)來返回整數。