25. Dezember 2012 · 20:50
Wollte gerade eine Liste via Linq filtern, so dass jedes Objekt nur noch einmal drin vorkommt. Theoretisch klappt das so:
var result = this.PersonList.Distinct().ToList<person>();
Problem ist, dass ich das ganze auf eine Liste anwende, welche Custom Objects enthält. Hier muss dann noch ein wenig Vorarbeit geleistet werden.
Und zwar muss das IEquatable Interface und die zwei Methoden Equals/GetHashCode implementiert werden. Danach sieht die Klasse wie folgt aus:
public class person : IEquatable<person>
{
public int ID { get; set; }
public string Name { get; set; }
public bool Equals(person obj)
{
if (this.Name == obj.Name && this.ID == obj.ID)
return true;
return false;
}
public override int GetHashCode()
{
int HashPersonName = this.Name == null ? 0 : this.Name.GetHashCode();
int HashPersonID = this.ID == null ? 0 : this.ID.GetHashCode();
return HashPersonName ^ HashPersonID;
}
}
Und schon funktioniert Distinct() auch wie oben beschrieben.
Achtung: Es wird nicht die Methode Equals überschrieben, sondern eine eigene erstellt!