[英](object) 0 == (object) 0
我想知道為什么在C#中
0 == 0 // return true
(object) 0 == (object) 0 // return false
在我看來,它是在比較參考而不是在比較投射的值。
之所以出現這種情況,是因為通過反射,我得到了ValueType的默認值,該值返回一個對象,當我將其與我的對象的當前值進行比較時,它返回兩者並不相同但具有相同的值。
對ValueType對象使用Equals或ToString可以使用,但對ReferenceType不能使用,后者可以為null,因此不允許Equals或ToString。
如果有人可以告訴我如何比較可以為任何類型,為null或具有值的其他對象,因為object == object似乎是錯誤的處理方法。 在這種情況下,有義務將我的對象重鑄為原始類型嗎?
是的,將兩邊都裝箱,然后比較參考文獻。 每次裝箱時都會創建一個新對象,因此引用是不同的。
考慮到無效性,與Equals
方法進行比較是必經之路。 最簡單的方法是使用靜態object.Equals(object, object)
方法:
if (object.Equals(x, y))
{
...
}
您正在拳擊,因此“ cast”實際上確實為每個對象創建了一個NEW對象。 如果要與對象進行比較,則可能必須編寫自己的.Equals實現。
基本上,上面是創建兩個對象引用,將它們存儲在內存中的不同位置,然后比較內存地址。 由於這個原因,每次都會返回false。
比較我所知道的兩個對象的唯一方法是檢查一個或兩個對象是否為null(如果一個為null而不是另一個,則它們不相等;我將其留給您的實現來確定null == null )。 如果兩個都不為空,則可以安全地在該對象上調用.equals。
強制轉換將強制裝箱,這實際上會創建新對象,然后將引用進行比較。 如果要按內容比較對象(使用引用所指向的對象的已實現比較),則應使用Equals方法:
Console.Write(((object)0).Equals((object)0)); // outputs "True"
這可能會澄清一些事情。
對象零=(對象)0; return(object.Equals(zero,zero)); //返回true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.