【发布时间】:2011-04-22 08:04:16
【问题描述】:
静态方法Object.Equals(Object, Object) 支持引用类型的引用相等,以及值类型的按位相等,在按位相等的情况下,比较的对象具有相同的二进制表示,而比较的值相等对象具有相同的值,即使它们具有不同的二进制表示。
例如,由于i1 和b1 是不同的类型,它们没有相同的二进制表示,因此Object.Equals(Object, Object) 返回false:
int i1 = 100;
byte b1 = 100;
Console.WriteLine(Object.Equals(i1, b1));//false
Object.Equals(Object, Object) 在比较d1 和d2 时也应该返回false(因为这两个变量具有相同值的不同二进制表示),但它反而返回true,这表明它使用值来比较它们平等:
decimal d1 = 1.10M;
decimal d2 = 1.100M;
Console.WriteLine(Object.Equals(d1, d2)); //true
在比较 d1 和 d2 时,Object.Equals(Object, Object) 不应该返回 False 吗?
来自http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx:
例如,考虑两个 Decimal 代表数字的对象 1.10 和 1.1000。 Decimal 对象没有按位相等,因为 他们有不同的二进制 陈述来解释 不同数量的尾随零。
感谢
【问题讨论】:
-
这是你发现的一个奇怪的错误
标签: c#