Tôi overrode the Equals() của lớp để so sánh giá trị ID của loại Guid.Cảnh báo: "... ghi đè Object.Equals (đối tượng o) nhưng không ghi đè lên Object.GetHashCode()"
Sau đó, Visual Studio cảnh báo:
... đè Object.equals (object o) nhưng không ghi đè Object.GetHashCode()
Vì vậy, tôi sau đó cũng gạt GetHashCode của nó () như thế này:
public partial class SomeClass
{
public override bool Equals(Object obj)
{
//Check for null and compare run-time types.
if (obj == null || this.GetType() != obj.GetType()) return false;
return this.Id == ((SomeClass)obj).Id;
}
public override int GetHashCode()
{
return this.Id.GetHashCode();
}
}
Có vẻ như nó hoạt động. Tôi đã làm điều này một cách chính xác chưa? Ghi nhớ Id là loại Guid. Có quan trọng là lớp của tôi là một đối tượng Khung thực thể không?
Khi nào một cá thể lớp con sẽ giống với một cá thể lớp cơ sở? Lớp con sẽ có các thuộc tính bổ sung và lớp cơ sở sẽ không biết về chúng khi so sánh. –
'Equals' hiện được thực hiện để chỉ quan tâm đến' Id', tất cả các lớp con sẽ có. – recursive
Tôi thừa nhận logic của bạn, nhưng như tôi đã chỉ ra trong bình luận của tôi với Eric, mã OP cho Equals đi thẳng ra khỏi một ví dụ từ [tài liệu MSDN chính thức] (http://msdn.microsoft.com/en-us/ library/bsc2ak47 (v = vs.110) .aspx). (Xem ví dụ về điểm lớp). – kmote