Heim > Backend-Entwicklung > C++ > Warum ist die Distinct-Methode von LINQ bei benutzerdefinierten Objekten ineffizient und wie kann ich das Problem beheben?

Warum ist die Distinct-Methode von LINQ bei benutzerdefinierten Objekten ineffizient und wie kann ich das Problem beheben?

Susan Sarandon
Freigeben: 2025-01-20 19:32:12
Original
525 Leute haben es durchsucht

Why is LINQ's Distinct Method Inefficient with Custom Objects, and How Can I Fix It?

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage