ich einen Fall, wo ich ein paar Punkte auf verschiedene greifen müssen, aber meine Quelle ist eine Sammlung von Objekten mit zwei Eigenschaften, wie folgt aus:Implementierung IEqualityComparer <T> auf ein Objekt mit zwei Eigenschaften in C#
public class SkillRequirement
{
public string Skill { get; set; }
public string Requirement { get; set; }
}
ich versuche, eine Sammlung zu erhalten, wie folgt:
SkillRequirementComparer sCom = new SkillRequirementComparer();
var distinct_list = source.Distinct(sCom);
ich habe versucht, eine IEqualityComparer<T>
dafür zu implementieren, aber ich fiel am GetHashCode()
Methode stapfte.
Die Klasse für die 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)
{
//?????
}
}
Normalerweise würde ich GetHashCode()
auf einer Eigenschaft nur, sondern weil ich zwei Eigenschaften bin im Vergleich zu, ich bin ein bisschen mit einem Verlust von dem, was zu tun ist. Mache ich etwas falsch oder vermisse etwas wirklich Offensichtliches?
Seien Sie vorsichtig, wenn Sie einen 'GetHashCode()' verwenden, der von veränderbaren Feldern abgeleitet ist! Wenn Sie das Objekt in eine Hashing-Sammlung einfügen, ändern Sie eines der Felder - autsch. Ich schlage vor, es unveränderlich zu machen. –
Die Werte für die Eigenschaften stammen ursprünglich aus einer Datenbank, wo die Spalten Nullen nicht zulassen, es gibt auch Prüfungen auf Null oder leere Zeichenfolgen, bevor ein Objekt der Quellenliste hinzugefügt wird, also ist es kein Problem: ^) –