linqのラムダスと合理化されている:希望に満ちた考え方?Distinct
linqの
を使用する必要があることがよくあります。 この仮説的な例のように、ラムダベースの過負荷は非常に簡潔になります。
Distinct
IEqualityComparer
var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);
このようなラムダのみの過負荷は.NETフレームワークには存在しませんが、いくつかの代替案が同じ結果を達成します。
1。 Distinct
およびアプローチ:
このアプローチは、キー(例えば、
)に基づいてグループ要素をグループ化するを使用して、各グループから最初の要素を選択します。 これにより、重複が効果的に除去されます
GroupBy
Select
2。実装:
GroupBy
CustomerId
を実装するカスタムクラスを作成すると、より堅牢でタイプセーフソリューションが提供されます。 これにより、特定の基準に基づいて、明確に定義された平等とハッシュコードロジックが可能になります。 これは一般に、保守性とパフォーマンスのための好ましい方法です。
<code class="language-csharp">IEnumerable<Customer> distinctCustomers = originalList .GroupBy(customer => customer.CustomerId) .Select(group => group.First());</code>
IEqualityComparer<T>
反射を使用してプロパティに基づいてオブジェクトを比較することは、非常に非効率的でエラーが発生しやすいです。 絶対に必要でない限り、このアプローチを避けてください
IEqualityComparer<T>
Anders Hejlsbergが指摘しているように、Lambdaだけでは
と。
。以上がラムダ式は、カスタム等価比較のための LINQ の独自のメソッドを簡素化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。