2017-07-05 40 views
7

我需要檢查兩個相同類型的對象是否是相同的實例並指向相同的內存分配。問題是這個類型已經重載了等於運算符,因此它將使用它來比較兩者是否相等,但我需要檢查它們以供參考。我通過object.ReferenceEquals()方法看,但它內部將相等運算當相等運算符被覆蓋時通過引用比較兩個對象

+0

不,它不。它比較*引用*使用*自己的*相等運算符。不是重載的 –

回答

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)是你的朋友。

相關問題