(对象)0 ==(对象)0

jps*_*nyx 7 c#

我想知道为什么在C#

0 == 0                   // return true 
(object) 0 == (object) 0 // return false
Run Code Online (Sandbox Code Playgroud)

对我来说,它似乎比较了参考而不是比较演员的价值.

这来找我,因为使用Reflection我得到ValueType的默认值,它返回一个对象,当我将它与我的对象的当前值进行比较时,它返回两者不同但具有相同的值.

使用Equals或ToString可以处理ValueType对象,但不能使用ReferenceType,它可以为null,因此不允许使用Equals或ToString.

如果有人可以告诉我如何比较可以是任何类型的不同对象,null或具有值,因为object == object似乎是错误的方法.在这种情况下,我必须将我的对象重铸为原始类型,ReferenceType总是不同吗?

Jon*_*eet 26

是的,它是拳击双方,并比较参考.每次打包时都会创建一个新对象,因此引用不同.

Equals考虑到无效性,与方法相比是可行的方法.最简单的方法是使用静态object.Equals(object, object)方法:

if (object.Equals(x, y))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)