Heim > Backend-Entwicklung > C++ > Können Lambda -Ausdrücke direkt mit `differenz ()` in C#verwendet werden?

Können Lambda -Ausdrücke direkt mit `differenz ()` in C#verwendet werden?

Patricia Arquette
Freigeben: 2025-01-25 22:56:12
Original
776 Leute haben es durchsucht

Die 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

Sie können Ihre eigene Erweiterungsmethode definieren.

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

Innenunion IEQULITYCORPARER

Obwohl es unmöglich ist,
<code class="language-csharp">var distinctValues = myCustomerList.DistinctBy(customer => customer.CustomerId);</code>
Nach dem Login kopieren
direkt anzugeben, können Sie die benutzerdefinierte Komparatorklasse als Änderungsmethode verwenden:

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

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

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!

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