Linq Distinct Nutzung bei Custom Objects

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!

Leave a Comment

Filed under C#

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.