Статический метод 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)
должен также возвращать значение false при сравнении d1
и d2
(так как две переменные имеют различное двоичное представление того же значения), но вместо этого возвращает true
, что предполагает, что он сравнивает их с использованием значения равенство:
decimal d1 = 1.10M;
decimal d2 = 1.100M;
Console.WriteLine(Object.Equals(d1, d2)); //true
Не следует ли Object.Equals(Object, Object)
возвращать False при сравнении d1
и d2
?
Из http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx:
Например, рассмотрим два десятичных объекты, которые представляют числа 1.10 и 1.1000. Десятичные объекты не имеют побитового равенства, потому что у них разные бинарные представительств для учета разное количество конечных нулей.
спасибо