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

歡迎訪問 生活随笔!

生活随笔

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

C#

c#对象集合去重_C# List集合去重操作注意点

發布時間:2025/4/5 C# 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#对象集合去重_C# List集合去重操作注意点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天調試代碼時發現list的distinct方法在對引用類型操作時并沒有去重,后來查閱資料發現list去重操作對象集合時比較的是對象的一個個引用地址,

因為集合里的對象都是一個個單獨的實例,所以并不會把內容相同的元素去掉,要想真正去重還是要自己寫方法篩選,但是值類型集合的就可以直接操作,包括Unoin,Intersect方法。

當默認distinct方法不滿足需求時,可以使用他的重載方法自定義一個比較器實現IEqualityComparer接口就行了

這是一個在網上找的可拓展的泛型去重方法

///

/// 可拓展的List對象集合去重比較器

///

/// 要去重的對象類

/// 自定義去重的字段類型

public class Compare : IEqualityComparer

{

private Func _getField;

public Compare(Func getfield)

{

this._getField = getfield;

}

public bool Equals(T x, T y)

{

return EqualityComparer.Default.Equals(_getField(x), _getField(y));

}

public int GetHashCode(T obj)

{

return EqualityComparer.Default.GetHashCode(this._getField(obj));

}

}

///

/// 自定義Distinct擴展方法

///

/// 要去重的對象類

/// 自定義去重的字段類型

/// 要去重的對象

/// 獲取自定義去重字段的委托

///

public static IEnumerable MyDistinct(this IEnumerable source, Func getfield)

{

return source.Distinct(new Compare(getfield));

}

調用方式是 List.MyDistinct(s => s.ActivityId).ToList() //可以傳委托也可以是匿名方法(lamda表達式)

總結

以上是生活随笔為你收集整理的c#对象集合去重_C# List集合去重操作注意点的全部內容,希望文章能夠幫你解決所遇到的問題。

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