日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#实现 Linq 序列的Distinct—— IEnumerable.Distinct()——IEqualityComparer

發布時間:2025/3/11 C# 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#实现 Linq 序列的Distinct—— IEnumerable.Distinct()——IEqualityComparer 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自詩人江湖老,原文地址

  在C#中使用List或者Collection的時候,我們經常需要使用到Distinct操作,但是微軟默認提供的Distinct重載方法并不能滿足我們的需求。這時候,我們就需要自己動手做一番工作了。

Distinct方法的重載

  Linq的Distinct的方法有如下一個重載版本:

public static IEnumerable<TSource> Distinc<TSource>(this IEnumerable<TSource> source,IEqualityComparer<TSource> comparer )

  其中:
  類型參數
  TSource
    source中的元素類型;
  參數
  source
    類型: System.Collections.Generic.IEnumerable<TSource>
    要從中移除重復元素的序列
  comparer
    類型:System.Collections.Generic.IEqualityComparer<TSource>
    用于比較值的 IEqualityComparer<T>。
  
  返回值
    類型:System.Collections.Generic.IEnumerable<TSource>
    一個 IEnumerable<T>,包含源序列中的非重復元素。
 

實現IEqualityComparer

  現在關鍵就是如何實現方法中的comparer 參數,我們希望做一個能夠適用于各個類型的comparer,這樣,我們就需要用到委托。
  好,話不多說,代碼如下:

using System.Collections.Generic;namespace MissTangProject.HelperClass {public class ListComparer<T> : IEqualityComparer<T>{public delegate bool EqualsComparer<F>(F x, F y);public EqualsComparer<T> equalsComparer;public ListComparer(EqualsComparer<T> _euqlsComparer){this.equalsComparer = _euqlsComparer;}public bool Equals(T x, T y){if (null != equalsComparer){return equalsComparer(x, y);}else{return false;}}public int GetHashCode(T obj){return obj.ToString().GetHashCode();}} }

使用Linq的Distinct方法

  假設我們有一個BoilerWorkerModel類,該類有一個code屬性,使用方法如下:
  

List<BoilerWorkerModel> newList = _list1.Distinct(new ListComparer<BoilerWorkerModel>((p1, p2) => (p1.Code == p2.Code))).ToList();
  • 1

  這樣,我們就實現了能夠適用于各個類型source的comparer了,可以隨意的使用Linq的Distinct方法了!
  到這里,大功告成。

總結

以上是生活随笔為你收集整理的C#实现 Linq 序列的Distinct—— IEnumerable.Distinct()——IEqualityComparer的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。