public static void Main() { var first = new Student { Id = 1, Name = "Pesho" }; var second = new Student { Id = 2, Name = "Gosho" }; var third = new Student { Id = 3, Name = "Stamat" }; var fourth = new Student { Id = 4, Name = "Kolio (me) :D" }; var marks = new Dictionary<Student, int>(); marks.Add(first, 6); // adding the object with hash code 1 marks.Add(second, 5); marks.Add(third, 4); marks.Add(fourth, 3); // this call works correctly as the hash code is still 1 Console.WriteLine(marks[first]); // changing the Id, without realizing the hash code will change to 10 too first.Id = 10; // the collection is no longer capable of finding the first student Console.WriteLine(marks[first]); }