Ich versuche, doppelte Einträge aus einer Liste zu entfernen, die ein generisches Objekt enthält.
%Vor%Und der Code, um die Duplikate zu entfernen:
%Vor%Das Problem ist Equals und GetHashCode wird nie aufgerufen. Jeder hat eine Idee warum?
Weil Distinct
faul ist. Versuche am Ende ToList()
hinzuzufügen.
Längere Antwort. Linq-Operationen sind eigentlich deklarative. Sie definieren die Abfrage, aber sie sagen nicht, sie auszuführen. IEnumerable<T>
enthält keine Daten, nur Abfragedefinition. Sie haben Abfrage erstellt, okay, wie Sie Daten erhalten?
foreach
die IEnumerable
. Da foreach
zwingend erforderlich ist, müssen alle Daten abgerufen werden (Abfrage ausgeführt). ToList
/ ToDictionary
auf. Diese Sammlungen speichern reale Daten, so dass das System eine Abfrage ausführen muss, um sie zu füllen. LINQ wird langsam ausgewertet, so dass es nicht ausgeführt wird, bis Sie GetEnumerator
und möglicherweise sogar MoveNext
aufrufen.
Fügen Sie am Ende dieser Abfrage ein .ToList()
hinzu und es sollte sofort ausgeführt werden.
Ich würde
machen %Vor%um die neue Liste sofort zu rendern. Es sei denn, Sie benötigen wirklich einen Enumerator, um den Speicher zu schonen.
Tags und Links c#