首頁 > 後端開發 > C++ > Lambda表達式可以簡化Linq的獨特方法來進行自定義平等比較嗎?

Lambda表達式可以簡化Linq的獨特方法來進行自定義平等比較嗎?

Patricia Arquette
發布: 2025-01-25 22:46:13
原創
736 人瀏覽過

Can Lambda Expressions Simplify LINQ's Distinct Method for Custom Equality Comparisons?

用lambdas:

簡化linq的Distinct:一廂情願? linq的

方法是用來使用枚舉的主食。 但是,定義不同操作的自訂平等比較通常需要使用

,這可能會感覺過於冗長。 像這個假設的例子一樣,基於Lambda的超載​​將變得更加簡潔: Distinct 基於lambda的IEqualityComparer

實用替代方案
<code class="language-csharp">var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);</code>
登入後複製
>在.NET框架中不存在這樣的僅Lambda超負荷,但幾種替代方案獲得了相同的結果:>

1。 Distinct方法:

此方法使用

>基於鍵(例如,)的元素,然後從每個群組中選擇第一個元素。 這有效地過濾了重複。 GroupBy Select

2。實作

GroupBy CustomerId

>建立實作的自訂類,提供了一個更健壯和類型的安全解決方案。 這允許根據您的特定標準明確定義的平等和哈希代碼邏輯。 這通常是可維護性和效能的首選方法。
<code class="language-csharp">IEnumerable<Customer> distinctCustomers = originalList
    .GroupBy(customer => customer.CustomerId)
    .Select(group => group.First());</code>
登入後複製

3。 (強烈灰心)基於反射的比較: IEqualityComparer<T>使用反射來基於屬性比較物件非常效率低且容易出錯。 除非絕對必要,否則避免使用這種方法。

缺乏僅蘭巴達的過載的根本原因:IEqualityComparer<T>

正如Anders Hejlsberg所指出的那樣,單獨使用Lambda不足以進行

>操作。 為了一致的行為,比較被視為平等的物件也必須產生相同的雜湊程式碼。 透過需要同時實現

>。

以上是Lambda表達式可以簡化Linq的獨特方法來進行自定義平等比較嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板