まあ、私はいくつかの従業員名前、年齢と給与を保存する小さなアプリケーションを作成しようとしています。だから私は、すべての従業員の給与を設定するために、Dictionary
を使用することを決めたと私はアウトかのようにコメントとして、私はそのコードDictionary.ContainsKey常に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
を返しますが、コードに示すように両方の方法を試しました。
EmployeeクラスのEqualsとGetHashCodeをオーバーライドする必要があります。 –
オブジェクトが比較される方法と関係があると思います。辞書内のオブジェクトと 'employeeToFind'内のオブジェクトは実際には異なるオブジェクトなので、それらを比較すると偽が返されます –