Distinct()
-Methode und Lambda -Expression in der C#: Untersuchung der alternativen Methode Distinct()
Expansionsmethode im System.LINQ bietet eine bequeme Methode zum Filtern der doppelten Elemente aus dem Aufzählungobjekt. Obwohl es in einfachen Fällen ohne Parameter verwendet werden kann, benötigt es eine IEqualityComparer
-Schunierung, um das Äquivalent des Objekts zu bestimmen. Dies kann problematisch sein, insbesondere bei Verwendung von Lambda -Ausdruck.
Gibt es eine schwere Last, die den Lambda -Ausdruck akzeptiert? Das Folgende ist die Implementierungsmethode:
Distinct()
benutzerdefinierte Erweiterungsmethode
Verwendung:
<code class="language-csharp">public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> source, Func<T, TKey> keySelector) { return source.GroupBy(keySelector).Select(group => group.First()); }</code>
Innenunion IEQULITYCORPARER
Obwohl es unmöglich ist,<code class="language-csharp">var distinctValues = myCustomerList.DistinctBy(customer => customer.CustomerId);</code>
Verwendung: IEqualityComparer
<code class="language-csharp">public class CustomerEqualityComparer : IEqualityComparer<Customer> { public bool Equals(Customer x, Customer y) { return x.CustomerId == y.CustomerId; } public int GetHashCode(Customer obj) { return obj.CustomerId.GetHashCode(); } }</code>
Anders Hejlsbergs Erklärung C# Sprachdesigner Anders Hejlsberg hat dieses Problem gelöst. Er erklärte, dass die Definition eines
-Roadings des Lambda -Ausdrucks technisch herausfordernd ist, denn wenn das Objekt in der internen Hash -Tabelle ordnungsgemäß funktioniert Daher muss verwendet werden.<code class="language-csharp">var equalityComparer = new CustomerEqualityComparer(); var distinctValues = myCustomerList.Distinct(equalityComparer);</code>
Das obige ist der detaillierte Inhalt vonKönnen Lambda -Ausdrücke direkt mit `differenz ()` in C#verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!