Ich versuche, eine eindeutige List<Author>
geben eine List<BlogPost>
, wobei jede BlogPost
hat eine Author
Eigenschaft. Ich habe die Erweiterungsmethode Distinct()
in Generika gefunden und versuche sie zu verwenden. Lassen Sie mich zuerst meinen Loop erklären und wo ich ihn verwenden möchte, dann werde ich meinen Unterricht erklären und wo ich Probleme habe.Abstrakt eine IEqualityComparer-Implementierung oder überschreiben den Standardvergleich zu Distinct-Methode verwenden
deutlichen Versuch, hier zu verwenden
public List<Author> GetAuthors() {
List<BlogPost> posts = GetBlogPosts();
var authors = new List<Author>();
foreach (var bp in posts) {
authors.Add(bp.Author);
}
return authors.Distinct().ToList();
}
Nach dem, was ich habe read on MSDN, Distinct()
entweder verwendet den Standardvergleich oder ein in comparer geben. Ich hatte gehofft (ich weiß natürlich nicht, ob das machbar ist), einen Vergleicher an einer Stelle zu schreiben und ihn für alle meine Klassen zu verwenden, da sie alle nach der gleichen Gleichheitsoperation (die die GUID
Eigenschaft von jede Klasse).
Alle meine Klassen erben von der BasePage
Klasse:
public class BasePage : System.Web.UI.Page, IBaseTemplate, IEquatable<IBaseTemplate>, IEqualityComparer<IBaseTemplate>
public class Author : BasePage
public class BlogPost : BasePage
Mein gleich implementiertes Verfahren in BasePage
die GUID
Eigenschaft vergleicht, die zu jeder einzigartig ist. Wenn ich Distinct()
auf einem Author
rufe, scheint es nicht zu funktionieren. Gibt es eine Möglichkeit, den Comparer an einem Ort einzupacken und immer in der Lage zu sein, ihn zu verwenden, anstatt etwas wie class AuhorComparer : IEqualityComparer<Auhor>
schreiben zu müssen, da ich dann für jede Klasse dasselbe schreiben müsste, jedes Mal, wenn ich Distinct()
verwenden möchte . Oder kann ich den Standardvergleich irgendwie überschreiben, also muss ich nichts an Distinct()
weiterleiten?
Danke für den HashSet-Vorschlag. Ich habe Ihre Änderung implementiert, aber ich bekomme immer noch eine Liste in derselben Größe. Ich habe eine Liste 3 von Beiträgen, zwei haben den gleichen Autor, einer hat einen völlig anderen Autor. Ich bekomme jedoch eine Liste von 3 Autoren. –
Beweist die Tatsache, dass das HashSet den gleichen Autor mehr als einmal enthält, dass meine Methoden Equals und GetHashCode falsch geschrieben sind? –
Ich habe bestätigt, dass dies nicht funktioniert hat, weil meine 'GetHashCode' Methode nicht korrekt geschrieben wurde. Jetzt habe ich diesen Ansatz mit dem 'HashSet' funktioniert. Vielen Dank! –