ホームページ > バックエンド開発 > C++ > lambda式は、c#in `distice()`で直接使用できますか?

lambda式は、c#in `distice()`で直接使用できますか?

Patricia Arquette
リリース: 2025-01-25 22:56:12
オリジナル
776 人が閲覧しました

Distinct() C# のメソッドとラムダ式: 代替手段の探索

System.Linq の Distinct() 拡張メソッドは、列挙可能なオブジェクトから重複要素をフィルターで除外する便利な方法を提供します。単純な場合は引数なしで使用できますが、オブジェクトの同等性を判断するには IEqualityComparer インスタンスが必要です。これは、特にラムダ式を使用する場合に面倒になる可能性があります。

Distinct() ラムダ式を受け入れるオーバーロードはありますか?その方法は次のとおりです:

カスタム拡張メソッド

要素を比較するためにラムダ式を受け取る独自の拡張メソッドを定義できます。

<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>
ログイン後にコピー

使用法:

<code class="language-csharp">var distinctValues = myCustomerList.DistinctBy(customer => customer.CustomerId);</code>
ログイン後にコピー

インライン IEqualityComparer

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>
ログイン後にコピー

使用法:

<code class="language-csharp">var equalityComparer = new CustomerEqualityComparer();
var distinctValues = myCustomerList.Distinct(equalityComparer);</code>
ログイン後にコピー
Anders Hejlsberg による説明

C# 言語設計者の Anders Hejlsberg がこの問題を解決しました。彼は、オブジェクトが内部ハッシュ テーブルで適切に動作するためには、等しい要素が同じ

戻り値を持つ必要があるため、ラムダ式を受け入れる Distinct() のオーバーロードを定義するのは技術的に困難であると説明しています。したがって、GetHashCode を使用する必要があります。 IEqualityComparer

Can Lambda Expressions Be Used Directly with `Distinct()` in C#?

以上がlambda式は、c#in `distice()`で直接使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート