次の表現が異なるのはなぜですか?
[1] (object)0 == (object)0 //false
[2] ((object)0).Equals((object)0) // true
実際には、おそらく.NETランタイムがbox整数になり、代わりに参照の比較を開始するため、[1]を完全に理解できます。しかし、なぜ[2]が異なるのですか?
int16別名shortEqualsメソッドで使用可能なオーバーロードについては、msdn.microsoft.com / en-us / library / ms173105.aspxを参照してください。。Eric Lippertのパズルを台無しにしたくはありませんが、これらのページを読んだら、簡単に理解できるはずです。
((Integer)0)==((Integer)0)、trueと評価されます。
IFormattable x = 0; bool test = (object)x == (object)x;ます。構造体が既にボックス内にある場合、新しいボクシングは実行されません。
short myShort = 0; int myInt = 0; Console.WriteLine("{0}{1}{2}", myShort.Equals(myInt), myInt.Equals(myShort), myInt == myShort);さて、この質問に対する答えを理解したところで、次の結果を予測して理解を確認してください。あなたの予測は正しかったですか?そうでない場合、違いを説明できますか?