Override Equals and GetHashCode on custom C# with Example
types For a class Person like: public class Person { public string Name { get; set; } public int Age { get; set; } public string Clothes { get; set; } } var person1 = new Person { Name = "Jon", Age = 20, Clothes = "some clothes" }; var person2 = new Person { Name = "Jon", Age = 20, Clothes = "some other clothes" }; bool result = person1.Equals(person2); //false because it's reference Equals But defining Equals and GetHashCode as follows: public class Person { public string Name { get; set; } public int Age { get; set; } public string Clothes { get; set; } public override bool Equals(object obj) { var person = obj as Person; if(person == null) return false; return Name == person.Name && Age == person.Age; //the clothes are not important when comparing two persons } public override int GetHashCode() { return Name.GetHashCode()*Age; } } var person1 = new Person { Name = "Jon", Age = 20, Clothes = "some clothes" }; var person2 = new Person { Name = "Jon", Age = 20, Clothes = "some other clothes" }; bool result = person1.Equals(person2); // result is true Also using LINQ to make different queries on persons will check both Equals and GetHashCode: var persons = new List { new Person{ Name = "Jon", Age = 20, Clothes = "some clothes"}, new Person{ Name = "Dave", Age = 20, Clothes = "some other clothes"}, new Person{ Name = "Jon", Age = 20, Clothes = ""} }; var distinctPersons = persons.Distinct().ToList();//distinctPersons has Count = 2