静的メソッドObject.Equals(Object, Object)
は、参照型の参照の等価性と値の型のビットの等価性をサポートしています。比較される値の等しいオブジェクトは、異なるバイナリ表現を持っていても同じ値を持ちます。 i1
とb1
は異なるタイプのものであるので私はObject.Equals(Object、Object)がビットの等価性をサポートしており、値の等価性を持たないことを確認しました
例えば、それらは、同じバイナリ表現を持っていないので、Object.Equals(Object, Object)
戻るfalse
:d1
とd2
を比較するとき
int i1 = 100;
byte b1 = 100;
Console.WriteLine(Object.Equals(i1, b1));//false
Object.Equals(Object, Object)
はまた、以降(falseを返すべきです2つの変数は同じ値の異なるバイナリ表現を持っています)、代わりにtrue
を返します。これは、値の等しいを使用してそれらを比較することを示唆しています。
decimal d1 = 1.10M;
decimal d2 = 1.100M;
Console.WriteLine(Object.Equals(d1, d2)); //true
とd2
を比較すると、Object.Equals(Object, Object)
が返されます。
http://msdn.microsoft.com/en-us/library/bsc2ak47.aspxから:
例えば、数字 1.10と1.1000を表す2進 オブジェクトを検討してください。 異なる後続ゼロ数を考慮して、異なるバイナリ 表現を持つため、Decimalオブジェクトはビット単位の等価を持ちません。
ありがとうMSDNから
これは奇妙なバグだとわかりました –