KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have the following class class Product : IEquatable<Product> { public Guid Id { get; set; } public bool Equals(Product other) { return Id.Equals(other.Id); } } If i try and create a unique list of the items of a list as follows Guid a = Guid.NewGuid(); List<Product> listA = new List<Product>(); listA.Add(new Product(){Id = a}); List<Product> listB = new List<Product>(); listB.Add(new Product() { Id = a }); Debug.Assert(listA.Union(listB).Count()==1); two items are returned, this occurs until I override the object.Equals method, once i do this and my code is as follows class Product : IEquatable<Product> { public Guid Id { get; set; } public bool Equals(Product other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return other.Id.Equals(Id); } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != typeof (Product)) return false; return Equals((Product) obj); } public override int GetHashCode() { return Id.GetHashCode(); } } my IEquatable Equals method is now called, but only if i override the base method, furthermore if i put a breakpoint on the object equals method it is never called. Why is this? ----UPDATE So with the product class class Product : IEquatable<Product> { public Guid Id { get; set; } public bool Equals(Product other) { return Id.Equals(other.Id); } public override int GetHashCode() { return Id.GetHashCode(); } } If
Tags (comma-separated)
Save Edits
Cancel