日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時(shí)間:2025/4/5 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#对象集合去重_C# List集合去重操作注意点 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天調(diào)試代碼時(shí)發(fā)現(xiàn)list的distinct方法在對(duì)引用類型操作時(shí)并沒有去重,后來查閱資料發(fā)現(xiàn)list去重操作對(duì)象集合時(shí)比較的是對(duì)象的一個(gè)個(gè)引用地址,

因?yàn)榧侠锏膶?duì)象都是一個(gè)個(gè)單獨(dú)的實(shí)例,所以并不會(huì)把內(nèi)容相同的元素去掉,要想真正去重還是要自己寫方法篩選,但是值類型集合的就可以直接操作,包括Unoin,Intersect方法。

當(dāng)默認(rèn)distinct方法不滿足需求時(shí),可以使用他的重載方法自定義一個(gè)比較器實(shí)現(xiàn)IEqualityComparer接口就行了

這是一個(gè)在網(wǎng)上找的可拓展的泛型去重方法

///

/// 可拓展的List對(duì)象集合去重比較器

///

/// 要去重的對(duì)象類

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

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擴(kuò)展方法

///

/// 要去重的對(duì)象類

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

/// 要去重的對(duì)象

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

///

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

{

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

}

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。