为什么0L在投射到物体时不等于0?

ken*_*ken 5 c#

我不认为我理解为什么第一个语句的评估结果true和最后一个语句评估结果false,但这是一个漫长的一天.

有人可以解释一下吗?

0L.Equals(0) // true
((object)0L).Equals(0L) // true
((object)0L).Equals(0) // false
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 13

Object.Equals如果对象是值类型,则首先比较类型.在这种情况下两者都不同.

MSDN:

如果当前实例是值类型,则Equals(Object)方法将测试值相等性.值相等意味着以下内容:两个对象属于同一类型.如下例所示,值为12的Byte对象不等于值为12的Int32对象,因为这两个对象具有不同的运行时类型.

  • 为了理解为什么会这样,人们需要了解正在进行的拳击.结构不具有类似引用类型的继承:`object`与引用类型的基本类不同 - 将值类型转换为`object`实际上将值包装在`object`实例中.对于引用类型,即使将实例强制转换为`object`,也会调用被覆的`Intals``It64`. (2认同)