Il metodo statico Object.Equals(Object, Object)
supporta l'uguaglianza di riferimento per i tipi di riferimento e l'uguaglianza bit per i tipi di valore, dove con l'uguaglianza bitwise gli oggetti confrontati hanno lo stesso binario rappresentazione, mentre gli oggetti di uguaglianza di valore confrontati hanno lo stesso valore anche se hanno rappresentazioni binarie diverse.Ho pensato che Object.Equals (Object, Object) supporta l'uguaglianza bit a bit e non l'uguaglianza valore
Per esempio, dal momento che i1
e b1
sono di diversi tipi, non hanno la stessa rappresentazione binaria e quindi Object.Equals(Object, Object)
ritorna false
:
int i1 = 100;
byte b1 = 100;
Console.WriteLine(Object.Equals(i1, b1));//false
Object.Equals(Object, Object)
dovrebbero anche restituire false quando si confrontano d1
e d2
(dal le due variabili hanno una rappresentazione binaria diversa dello stesso valore), ma restituisce invece true
, il che suggerisce che le confronta con l'uguaglianza di valore:
decimal d1 = 1.10M;
decimal d2 = 1.100M;
Console.WriteLine(Object.Equals(d1, d2)); //true
Non dovrebbe Object.Equals(Object, Object)
restituire False quando si confrontano d1
e d2
?
Da http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx:
Ad esempio, consideriamo due decimale oggetti che rappresentano i numeri 1.10 e 1.1000. Gli oggetti decimali non hanno uguaglianza bit a bit poiché rappresentano rappresentazioni binarie diverse per tenere conto del diverso numero di zero finali .
thanx
Questo è un bug strano che hai trovato –