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

C# 在下面的程序中如何使用Equals或hashcode,c#,C#,如果在运行时我从employee类中给出employee的kinid,我想从manager类中获取manager的详细信息。我如何使用Equals或Hashcode来实现这一点 public class employee { public string empname { get; set;} public string location { get; set; } public int kinid { get; set; } public double magk

如果在运行时我从employee类中给出employee的kinid,我想从manager类中获取manager的详细信息。我如何使用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>();
公共类员工
{
公共字符串empname{get;set;}
公共字符串位置{get;set;}
公共int kinid{get;set;}
公共双magkin{get;set;}
}
公共班级经理
{
公共字符串magname{get;set;}
公共双magkin{get;set;}
}
字典关系=新字典();
我很长时间没有使用C了,但是像这样的东西应该可以用了:
KindFind是要搜索的kinid

manager findManager(int kinidFind) {
    foreach( KeyValuePair<employee, manager> i in relation) {
                    if (i.Key.kinid==kinidFind) {
                        return i.Value;
                    }
                }
}
manager查找管理器(int-kinidFind){
foreach(与之相关的KeyValuePair i){
if(i.Key.kinid==kinidFind){
返回i.值;
}
}
}

或者既然字典已经加载,你也可以这样列举它。从Brads的回答来看,这只是一个感觉或品味的问题

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

假设kinid是唯一标识符(您在标识时不关心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);
}
但是,这不是一个好的通用解决方案,因为如果以后您希望通过其他字段找到该员工,该怎么办

考虑将该词典更改为:
如果int是员工的kinid,那么它是自解释的。

为您简化了返回语句。