我有一個情況我需要抓住了一堆對不同的項目,但我的源對象具有兩個屬性的集合,像這樣的對象:實現的IEqualityComparer <T> C#中的兩個屬性
public class SkillRequirement
{
public string Skill { get; set; }
public string Requirement { get; set; }
}
我試圖得到一個集合,如下所示:
SkillRequirementComparer sCom = new SkillRequirementComparer();
var distinct_list = source.Distinct(sCom);
我試圖實現此一IEqualityComparer<T>
,但我摔倒在GetHashCode()
方法難倒。
的比較程序類:
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)
{
//?????
}
}
通常我只想用GetHashCode()
上的屬性,但因爲我比較對兩個屬性,我在做什麼損失感到有點。我做錯了什麼,或者錯過了一些非常明顯的東西?
使用從可變字段派生的'GetHashCode()'時要小心!如果你把對象放在哈希集合中,那麼改變其中一個字段 - ouch。我建議讓它不可變。 –
屬性的值原本來自數據庫,其中列不允許爲空值,因此在將對象添加到源列表之前還會檢查空字符串或空字符串,因此它不是一個問題:^) –