==和Equals()之间的C#差异

一曲冷凌霜 提交于 2020-02-27 01:05:49

我在Silverlight应用程序中有一个条件,该条件比较2个字符串,由于某种原因,当我使用==它返回false,.Equals()返回true

这是代码:

if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
    // Execute code
}

if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
    // Execute code
}

为什么会这样呢?


#1楼

在答案上再加一点。

.EqualsTo()方法使您可以比较文化和区分大小写。


#2楼

==运算符 1。如果操作数是“ 值类型”并且它们的值相等,则返回true,否则返回false。 2.如果操作数是引用类型 (字符串除外),并且都引用同一对象,则返回true,否则返回false。 3.如果操作数是字符串类型,并且它们的值相等,则返回true,否则返回false。

.Equals 1.如果操作数是引用类型,则它执行引用相等性 ,即如果两个引用相同的对象,则返回true,否则返回false。 2.如果操作数是值类型,则与==运算符不同,它首先检查其类型;如果它们的类型相同,则执行==运算符,否则返回false。


#3楼

首先, 有区别的。 对于数字

> 2 == 2.0
True

> 2.Equals(2.0)
False

对于弦

> string x = null;
> x == null
True

> x.Equals(null)
NullReferenceException

在这两种情况下, ==行为都比.Equals有用。


#4楼

C#中的==标记用于两个不同的相等性检查运算符。 当编译器遇到该令牌时,它将检查被比较的两种类型中的任何一种是否对要比较的特定组合类型(*)或两种类型都可以转换成的类型的组合实现了相等运算符重载。 如果编译器发现这样的重载,它将使用它。 否则,如果这两种类型都是引用类型,并且它们不是无关的类(可能是接口,也可能是相关的类),则编译器将把==视为引用比较运算符。 如果两个条件都不适用,则编译将失败。

请注意,某些其他语言为这两个相等性检查运算符使用单独的标记。 例如,在VB.NET中, =标记仅在表达式中用于可重载的equity-check运算符,而Is用作引用测试或null-test运算符。 在不覆盖相等性检查运算符的类型上使用=将会失败,尝试将Is用于除测试引用相等性或空值之外的任何其他用途都将失败。

(*)类型通常只重载相等性以便与自身进行比较,但是对于类型重载相等性运算符以与其他特定类型进行比较可能很有用; 例如, int可以(和恕我直言应该但没有)定义一个等于float的相等运算符,以使16777217不会将自身报告为等于16777216f。 由于没有定义此类运算符,因此C#会将int提升为float ,将其舍入为16777216f,直到相等检查运算符看到它为止; 然后,该运算符将看到两个相等的浮点数,并报告为相等,而不会发生舍入。


#5楼

当我们创建任何对象时,对象有两个部分,一个是内容,另一个是对该内容的引用。 ==比较内容和参考; equals()仅比较内容

http://www.codeproject.com/Articles/584128/What-is-the-difference-between-equalsequals-and-Eq

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!