2015-09-23 17 views

Trả lời

91

Không, nó không phải là tương đương - vì Version quá tải toán tử ==.

Đoạn đó phôi các toán hạng bên trái để Object tương đương với:

if (Object.ReferenceEquals(version, null)) 

... thay vì gọi thực hiện operator== trong Version. Đó là khả năng để thực hiện một kiểm tra nullity như là hành động đầu tiên của nó anyway, nhưng điều này chỉ bỏ qua các cấp độ thêm.

Trong các trường hợp khác, điều này có thể tạo ra sự khác biệt rất đáng kể. Ví dụ:

string original = "foo"; 
string other = new string(original.ToCharArray()); 
Console.WriteLine(original == other); // True 
Console.WriteLine((object) original == other); // False 
+2

@afaolek: Không cần phải đi qua nguồn - chỉ cần xem tài liệu và bạn sẽ thấy toán tử bình đẳng. –

+0

Sử dụng mẫu trong câu trả lời của bạn, kết quả của 'Console.WriteLine ((đối tượng) ban đầu == (đối tượng) khác);' là gì? – afaolek

+1

@afaolek: Sai một lần nữa - điều đó không thay đổi bất cứ điều gì, bởi vì nó vẫn sẽ sử dụng so sánh tham chiếu, về cơ bản. –

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