[英]Using == or Equals for string comparison
在某些語言(例如C ++)中,您不能使用==等運算符進行字符串比較,因為它會比較字符串對象的地址,而不是字符串本身。 但是,在C#中,您可以使用==來比較字符串,它實際上會比較字符串的內容。 但是還有字符串函數來處理這種比較,所以我的問題是; 你應該?
鑒於兩個字符串:
string aa = "aa";
string bb = "bb";
你應該像這樣比較它們:
bool areEqual = (aa == bb);
或者你應該使用Equal函數,如下所示:
bool areEqual = aa.Equals(bb);
反正有技術差異嗎? 或者最佳實踐的合理論據?
這是運營商的實施:
public static bool operator == (String a, String b) {
return String.Equals(a, b);
}
不要為此失眠。
我不會用:
aa.Equals(bb)
除非我知道 aa
不可能是null。 我可能會用:
string.Equals(aa,bb)
但我主要使用它我想使用一種特定的StringComparison
模式(不變量,序數,不區分大小寫等)。 雖然我也可以使用StringComparer
實現,因為它們更容易抽象(例如,傳遞給Dictionary<string, Foo>
以獲取不區分大小寫的序數字典)。 對於一般用途,
a == b
很好。
沒有技術差異(除非aa為空)。 使用任何看起來更好的東西。 在我看來,使用運算符重載使代碼更清晰。
在需要(或將來可能需要)其他參數時使用函數(如在CompareTo()中)
最佳實踐,我傾向於總是使用Equals()函數進行字符串比較。 當其他人讀取您特別想要比較字符串的代碼時,這就很清楚了。
一般來說,==做指針相等,而.equals檢查屬性是否相等。 所以,如果你做了類似的事情
a = 'a';
b = 'a';
bool c = (a == b);
bool d = (a.Equals(b))
那么c應該返回false而d應該是true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.