C# 字符串相等性難題:==
與 Equals()
的比較
C# 提供了兩種比較字符串的運算符:==
和 Equals()
。雖然它們看起來可以互換,但它們表現出細微不同的行為,可能導致意想不到的結果。讓我們通過一個具體的場景深入探討這個語言難題。
在一個 Silverlight 應用程序中,一個條件比較兩個字符串:
<code class="language-csharp">if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack")) { // 执行代码 } if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack") { // 执行代码 }</code>
奇怪的是,==
比較返回 false,而 Equals()
調用返回 true。為什麼會出現這種差異?
答案在於這些運算符的底層實現。當與對象表達式一起使用時,==
會評估為 System.Object.ReferenceEquals
。此方法比較的是對象引用,而不是對象的 內容。在這種情況下,兩個字符串存儲在不同的內存位置,因此 ReferenceEquals
返回 false。
另一方面,Equals
是一個虛擬方法,可以被派生類型重寫。對於字符串類型,重寫版本比較字符串的實際 內容,從而返回 true。
因此,對於字符串相等性比較,建議使用 Equals()
,它更直觀,並且執行所需的基於內容的比較。
以上是C#字符串比較:我什麼時候應該使用`==`vs.的詳細內容。更多資訊請關注PHP中文網其他相關文章!