У меня есть тип, который я использую как ключ в IDictionary. Тип выглядит следующим образом:
public class Employee
{
public string Name { get; set; }
public int ID { get; set; }
public override bool Equals(object obj)
{
Employee emp = obj as Employee;
if (emp != null)
return emp.Name.Equals(this.Name);
return false;
}
public override int GetHashCode()
{
return this.Name.GetHashCode();
}
}
Теперь я создал словарь в качестве следующего в моей статье следующим образом
IDictionary<Employee, int> empCollection = new Dictionary<Employee, int>();
Employee emp1 = new Employee() { Name = "abhi", ID = 1 };
Employee emp2 = new Employee() { Name = "vikram", ID = 2 };
Employee emp3 = new Employee() { Name = "vikram", ID = 3 };
empCollection.Add(emp1, 1);
empCollection.Add(emp2, 2);
empCollection.Add(emp3, 3);
Теперь при отладке я узнал, что когда emp1 добавлен в коллекцию, только метод GetHashCode вызывается типа ключа, после чего, когда emp2 добавляется в коллекцию, метод GetHashCode снова вызывается, но в случае emp3 оба GetHashCode и методы Equals.
Может быть, это выглядит слишком наивно, задавая этот вопрос, но почему метод Equals не вызывается, когда объект eqImp2 добавляется в коллекцию. Что происходит внутри. Пожалуйста, объясните.