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
をインラインで直接指定することはできませんが、回避策としてカスタム コンパレータ クラスを使用できます。
<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>
戻り値を持つ必要があるため、ラムダ式を受け入れる Distinct()
のオーバーロードを定義するのは技術的に困難であると説明しています。したがって、GetHashCode
を使用する必要があります。 IEqualityComparer
以上がlambda式は、c#in `distice()`で直接使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。