Ну, я пытаюсь создать небольшое приложение, которое сохраняет некоторые имена сотрудников, возрасты, а также зарплаты. Поэтому я решил использовать Dictionary
для того, чтобы установить зарплату каждого сотрудника и я пришел с этим кодомDictionary.ContainsKey Always Returns False
Код
var employeeSalaryDictionary = new Dictionary<Employee, int>();
employeeSalaryDictionary.Add(new Employee { Name = "Chuck", Age = 37 }, 1000);
employeeSalaryDictionary.Add(new Employee { Name = "Norris", Age = 37 }, 2000);
employeeSalaryDictionary.Add(new Employee { Name = "Rocks", Age = 44 }, 3000);
Employee employeeToFind = new Employee { Name = "Chuck", Age = 37 };
//or even
Employee employeeToFind = new Employee { Name = "Chuck"};
//Always False...
bool exists = employeeSalaryDictionary.ContainsKey(employeeToFind);
Класс Employee
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
}
Однако, как я закомментировать или название темы указано, .ContainsKey
всегда возвращает мне False
, хотя я пробовал оба способа, как показано в коде.
Вы должны переопределить Equals и GetHashCode для вашего класса Employee –
Я думаю, что это как-то связано с тем, как сравниваются объекты. Поскольку объекты в словаре и в 'employeeToFind' на самом деле являются разными объектами - их сравнение возвращает false –