2017-07-05 18 views
7

Tôi cần kiểm tra xem hai đối tượng cùng loại có cùng các phiên bản và trỏ đến cùng một cấp bộ nhớ hay không. Vấn đề là loại có quá tải toán tử bình đẳng và do đó nó sẽ sử dụng nó như so sánh cả hai cho bình đẳng, nhưng tôi cần phải kiểm tra chúng để tham khảo. Tôi nhìn qua object.ReferenceEquals() phương pháp, nhưng nó trong nội bộ áp dụng điều hành bình đẳngSo sánh hai đối tượng bằng tham chiếu khi toán tử bằng nhau được ghi đè

+0

Không, không. Nó so sánh * tham chiếu * bằng cách sử dụng * toán tử bình đẳng * riêng của nó. Không phải những người quá tải –

Trả lời

7

Các nhà khai thác có thể không được ghi đè - họ chỉ có thể là quá tải.

Vì vậy, các nhà điều hành trong ==object.ReferenceEquals vẫn so sánh tài liệu tham khảo, hoặc bạn có thể làm điều tương tự cho mình bằng cách đúc một hoặc cả hai toán hạng:

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 không chính xác những gì bạn cần, trừ khi bạn nói về một từ điển . Nó không kiểm tra Equals (theo nghĩa đen chỉ là ldarg.0, ldarg.1, ceq, ret). Ngoài ra, chỉ cần đúc để phản đối:

bool same = (object)x == (object)y; 

Nếu bạn cần sự hỗ trợ từ điển (như vậy: GetHashCode): System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj) là bạn của bạn.

Các vấn đề liên quan