KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Should we override both Equals and GetHashCode properties when implementing a custom class instances comparison? In the following code I have a collection of classes. The class A is compared by the ID , the class B - by Code . using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { List<I> bars = new List<I>(); bars.Add(new A() { Id = 1, Code = "one A" }); bars.Add(new B() { Id = 1, Code = "one B" }); bars.Add(new A() { Id = 1, Code = "one A+" }); bars.Add(new B() { Id = 1, Code = "one B" }); // Code = "one B+" var distictBars = bars.Distinct(); foreach (var item in distictBars) { Debug.WriteLine(item.Code); } } } interface I { string Code { get; set; } } class A : I, IEquatable<A> { public int Id { get; set; } public string Code { get; set; } public bool Equals(A other) { // this is the ??? comparison return this.Id == other.Id; //return this.Code == other.Code; } public override bool Equals(object obj) { if (obj is A) return this.Equals(obj as A); else return object.ReferenceEquals(this, obj); } public override int GetHashCode() { // this is the wanted comparison return this.Id; } } class B : I, IEquatable<B> { public int Id { get; set; } public string Code { get; set; } public bool Equals(B other) { // this is the ??? comparison
Tags (comma-separated)
Save Edits
Cancel