如何在下面的程序中使用Equals或hashcode ?

本文关键字:Equals hashcode 在下面 程序 | 更新日期: 2023-09-27 18:19:08

我想从管理器类中获取管理器的详细信息,如果在运行时我从员工类中给出员工的类型。我怎么能做到这一点使用等号或Hashcode?

public class employee
{
    public string empname { get; set;}
    public string location { get; set; }
    public int kinid { get; set; }
    public double magkin { get; set; }
}
public class manager
{
    public string magname { get; set; }
    public double magkin { get; set; }
}
Dictionary<employee, manager> relation = new Dictionary<employee, manager>();

如何在下面的程序中使用Equals或hashcode ?

我已经很长时间没有使用c#了,但是像这样的东西应该可以工作:
kinidFind是你想要搜索的种类。

manager findManager(int kinidFind) {
    foreach( KeyValuePair<employee, manager> i in relation) {
                    if (i.Key.kinid==kinidFind) {
                        return i.Value;
                    }
                }
}

假设kind是唯一标识符(在标识中不关心employee的其他字段),那么在employee类中可以执行以下操作:

override int GetHashCode()
{
    return kinid;
}
override bool Equals(Object obj)
{
    if (obj == null) return false;
    emploee emp = obj as employee;
    if ((System.Object)emp == null) return false;
    return (kinid == emp.kinid);
}

然而,这不是一个很好的通用解决方案,因为如果以后你想通过其他字段找到员工怎么办?

考虑将该字典更改为:Dictionary<int,>其中int是雇员的类型,那么它是不言自明的。

或者因为Dictionary已经加载了你也可以这样枚举它这只是一个感觉或品味的问题从brand的回答来看

foreach (var pair in relation)
{
    if (pair.key == kinidFind )
    {
       return relation[pair.key];
    }
}