Behebung der Ineffizienz der eindeutigen Methode von LINQ für benutzerdefinierte Objekte
Die Distinct()
-Methode von LINQ kann bei Verwendung mit benutzerdefinierten Objekten ineffizient sein. Dies liegt daran, dass es standardmäßig auf Referenzgleichheit setzt – das heißt, es betrachtet zwei Objekte nur dann als unterschiedlich, wenn sie unterschiedliche Speicherorte belegen. Identische Objekte (mit denselben Eigenschaftswerten) werden als separate Einheiten behandelt, was zu doppelten Ergebnissen führt.
Die Lösung liegt in der Implementierung der IEquatable<T>
-Schnittstelle innerhalb Ihrer benutzerdefinierten Objektklasse. Auf diese Weise können Sie definieren, wie die Gleichheit Ihrer Objekte anhand ihrer Eigenschaften und nicht anhand ihrer Speicheradressen ermittelt wird.
Hier ist eine verbesserte Author
-Klasse, die IEquatable<Author>
implementiert:
<code class="language-csharp">public class Author : IEquatable<Author> { public string FirstName { get; set; } public string LastName { get; set; } public bool Equals(Author other) { if (other is null) return false; return FirstName == other.FirstName && LastName == other.LastName; } public override int GetHashCode() { return HashCode.Combine(FirstName, LastName); } }</code>
Indem Sie die Equals()
-Methode überschreiben und GetHashCode()
implementieren, stellen Sie Distinct()
die Logik zur Verfügung, die es benötigt, um doppelte Author
-Objekte basierend auf ihren FirstName
- und LastName
-Eigenschaften korrekt zu identifizieren und zu entfernen. Beachten Sie die Verwendung von HashCode.Combine
für eine robustere Hash-Code-Generierung. Dadurch wird sichergestellt, dass Objekte, die durch Equals()
als gleich angesehen werden, auch denselben Hashcode erzeugen. Mit diesem Ansatz identifiziert und entfernt Distinct()
jetzt doppelte Autorenobjekte genau anhand ihrer Namen.
Das obige ist der detaillierte Inhalt vonWarum ist die Distinct-Methode von LINQ bei benutzerdefinierten Objekten ineffizient und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!