0 == 0 // return true
(object) 0 == (object) 0 // return false
なぜそれが参照の比較の代わりにキャストの値を比較するように見えますか。
Reflectionでは、オブジェクトを返すValueTypeのデフォルト値を取得しています。オブジェクトの現在の値と比較すると、同じではないが同じ値を返すためです。EqualsまたはToStringの使用は、ValueTypeオブジェクトでは機能しますが、ReferenceTypeでは使用できません。これは、nullでもかまいませんので、EqualsまたはToStringを許可しません。
もしオブジェクトが==オブジェクトが間違った方法であるように思われるので、誰かが私にどのような型でもよい別のオブジェクトを比較できるか教えてください。この場合、オブジェクトを元のタイプにリキャストする必要がありますか?ReferenceTypeは常に異なるでしょうか?
http://msdn.microsoft.com/en-us/library/yz2be5wk(VS.71).aspx(ボクシングリファレンス) – meandmycode