如何在以下程序中使用Equals或hashcode

时间:2011-12-30 06:44:57

标签: c#

如果在运行时我从员工类中提供员工的kinid,我想从经理类中获取经理的详细信息。如何使用Equals或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>();

3 个答案:

答案 0 :(得分:1)

我很长一段时间没有使用过C#,但是这样的东西应该可以工作:
kinidFind是你想要搜索的kinid。

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

答案 1 :(得分:1)

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

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);
}

但是,这不是一个好的通用解决方案,因为如果您以后想要通过其他领域找到该员工会怎么样?

考虑将该字典更改为: 字典&LT; INT,经理&gt;如果int是员工的kinid,那么它就是自我解释的。

答案 2 :(得分:0)

或者因为字典已经加载了你可以用这种方式枚举它,这只是一个感觉或品味的问题,从布拉德回答这一点

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