我需要檢查兩個相同類型的對象是否是相同的實例並指向相同的內存分配。問題是這個類型已經重載了等於運算符,因此它將使用它來比較兩者是否相等,但我需要檢查它們以供參考。我通過object.ReferenceEquals()
方法看,但它內部將相等運算當相等運算符被覆蓋時通過引用比較兩個對象
7
A
回答
7
運營商不能覆蓋 - 他們只能超載。
所以==
運營商object.ReferenceEquals
仍然比較基準,或者你可以自己做同樣的事情,鑄造一個或兩個操作數:
string x = "some value";
string y = new string(x.ToCharArray());
Console.WriteLine(x == y); // True
Console.WriteLine((object) x == (object) y); // False
Console.WriteLine(ReferenceEquals(x, y)); // False
5
ReferenceEquals
不正是你需要什麼,除非你談論一個字典。它不檢查Equals
(它實際上只是ldarg.0
,ldarg.1
,ceq
,ret
)。另外,只投反對:
bool same = (object)x == (object)y;
如果你需要詞典支持(這樣:GetHashCode
):System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj)
是你的朋友。
相關問題
- 1. 比較同一類的2個對象(覆蓋==運算符)C++
- 2. 不覆蓋比較運算符的Python對象是否等於自己?
- 3. 使用相等運算符比較兩個類
- 4. 覆蓋NHibernate中的==(相等)運算符?
- 5. 通過協議對兩個對象進行比較/等同
- 6. 使用比較運算符與兩個不同類對象
- 7. 覆蓋等於和比較字符串
- 8. 比較兩個對象以覆蓋其中一個的值
- 9. 比較shared_ptr對象相等
- 10. 相等對象比較:JAVA
- 11. 對象數組被通過的最後一個對象覆蓋
- 12. 當比較對象時等於vs GetHashCode
- 13. java中的比較運算符對象
- 14. 使用相等運算符來比較兩個地形雙打是否安全?
- 15. 堆中的對象和覆蓋索引運算符
- 16. 當有多種方法比較兩個相同類型的對象時,覆蓋CompareTo?
- 17. 比較運算符!==對0
- 18. 比較簡單相等運算
- 19. Intelij比較兩個覆蓋率數據
- 20. 當並行運行測試時Webdriver對象被覆蓋
- 21. SQL Server不等式比較運算符,爲什麼有兩個
- 22. 通過引用傳遞一個對象重載運算符 - C++
- 23. 最小的一組比較運算符覆蓋
- 24. 覆蓋JavaScript中比較運算符的默認行爲
- 25. 通過兩個屬性比較兩個對象
- 26. 當重載相等運算符==時,應該首先檢查引用相等嗎?
- 27. 比較兩個複雜對象的相等性
- 28. 如何比較兩個對象在Scala中的相等性?
- 29. 比較兩個遊標對象的相等性
- 30. 比較兩個整數對象是否相等,無論類型
不,它不。它比較*引用*使用*自己的*相等運算符。不是重載的 –