C# 字符串相等性难题:==
与 Equals()
的比较
C# 提供了两种比较字符串的运算符:==
和 Equals()
。虽然它们看起来可以互换,但它们表现出细微不同的行为,可能导致意想不到的结果。让我们通过一个具体的场景深入探讨这个语言难题。
在一个 Silverlight 应用程序中,一个条件比较两个字符串:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack")) { // 执行代码 } if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack") { // 执行代码 }
奇怪的是,==
比较返回 false,而 Equals()
调用返回 true。为什么会出现这种差异?
答案在于这些运算符的底层实现。当与对象表达式一起使用时,==
会评估为 System.Object.ReferenceEquals
。此方法比较的是对象引用,而不是对象的 内容。在这种情况下,两个字符串存储在不同的内存位置,因此 ReferenceEquals
返回 false。
另一方面,Equals
是一个虚拟方法,可以被派生类型重写。对于字符串类型,重写版本比较字符串的实际 内容,从而返回 true。
因此,对于字符串相等性比较,建议使用 Equals()
,它更直观,并且执行所需的基于内容的比较。
以上是C#字符串比较:我什么时候应该使用`==`vs.的详细内容。更多信息请关注PHP中文网其他相关文章!