Verwenden Sie den Lambda-Ausdruck, um die Distinct()-Methode anzupassen
Beim Umgang mit aufzählbaren Objekten ist es oft notwendig, eindeutige Werte zu unterscheiden. Obwohl der System.Linq-Namespace eine Distinct()-Erweiterungsmethode bereitstellt, fehlt ihm eine Überladung, die einen Lambda-Ausdruck zur Angabe der Objektgleichheit akzeptiert.
Problem
Aufgrund der fehlenden Überladung basierend auf Lambda-Ausdrücken können Programmierer nur die IEqualityComparer-Schnittstelle verwenden, die die Methoden Equals() und GetHashCode() implementieren muss. Dieser Ansatz kann mühsam und umständlich sein.
Lambda-Ausdruck-basierte Problemumgehung
Während keine vorhandene Erweiterungsmethode der erforderlichen Lambda-Syntax entspricht, kann eine kreative Problemumgehung einen ähnlichen Effekt erzielen. Mit GroupBy() und Select() können Sie aufzählbare Objekte konvertieren:
<code class="language-csharp">IEnumerable<customer> filteredList = originalList .GroupBy(customer => customer.CustomerId) .Select(group => group.First());</code>
Indem Sie Elemente nach einem angegebenen Schlüssel gruppieren und das erste Element aus jeder Gruppe auswählen, erstellen Sie effektiv eine eindeutige Liste basierend auf dem in GroupBy() bereitgestellten Lambda-Ausdruck.
Gleichheitsproblem basierend auf Lambda-Ausdruck
Es ist wichtig zu beachten, dass auf Lambda-Ausdrücken basierende Gleichheitskomparatoren bei bestimmten Typen (z. B. Zeichenfolgen) zu unerwartetem Verhalten führen können. Um eindeutige Operationen zuverlässig auszuführen, muss eine genaue und konsistente Implementierung von GetHashCode() sichergestellt werden.
Weitere Einblicke
.NET-Chefarchitekt Anders Hejlsberg erläutert die Einschränkungen der auf Lambda-Ausdrücken basierenden Distinct()-Überladung, die darauf zurückzuführen ist, dass die Hash-Tabelle in Distinct() eine Lücke zwischen Equals() und GetHashCode() erfordert, um ordnungsgemäß zu funktionieren.
Das obige ist der detaillierte Inhalt vonWie kann ich effizient eine bestimmte Liste mit Lambda -Ausdrücken in C#erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!