我有一个案例,我需要抓取一堆不同的项目,但我的源是一个具有两个属性的对象的集合,如下所示:
public class SkillRequirement
{
public string Skill { get; set; }
public string Requirement { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我尝试获得如下集合:
SkillRequirementComparer sCom = new SkillRequirementComparer();
var distinct_list = source.Distinct(sCom);
Run Code Online (Sandbox Code Playgroud)
我试图为此实现一个IEqualityComparer<T>,但我对这个GetHashCode()方法感到难过.
Comparer的类:
public class SkillRequirementComparer : IEqualityComparer<SkillRequirement>
{
public bool Equals(SkillRequirement x, SkillRequirement y)
{
if (x.Skill.Equals(y.Skill) && x.Requirement.Equals(y.Requirement))
{
return true;
}
else
{
return false;
}
}
public int GetHashCode(SkillRequirement obj)
{
//?????
}
}
Run Code Online (Sandbox Code Playgroud)
通常我会GetHashCode()在一个属性上使用,但因为我在两个属性上进行比较,所以我有点不知所措.我做错了什么,或者遗漏了一些非常明显的东西?
'Equal'和'GetHashcode'方法存在于对象类中,我们的类型继承了对象基类.直接实现对象的两个方法和使用IComparer接口有什么不同?
如果我们重写对象的Equal和GetHashCode,并推送到哈希表,它将使用overring的相等方法?
什么是新的哈希表与IEqualityComparer构造函数的不同之处?