国产丰满大乳无码免费播放_久草一级毛片_国产av黄色一区二区_亚洲一级 片内射欧美乱强上司_制服丝袜亚洲日韩中文字幕欧美_亚洲av中文小島_国产精品无码久久av嫩草下载_91视频黄片软件APP大全

XML|HTML|TXT
您當前位置: 軟件開發>> 新利在線娛樂>> 軟件開發技術>> 瀏覽文章

使用代理實現對C# list distinct操作

在c#編程中經常使用,而經常用list 去存放實體集,因此會設計到對list的各種操作,比較常見的有對list進行排序,查找,比較,去重復。而一般的如果要對list去重復如果使用linq distinct方式,會遇到一些坑爹的問題,發現結果集中還是存在重復數據,原因是使用這種方法是對對象的引用去重復,并不滿足我們的需求。因此本文通過c#代理的方式實現對list distinct操作。

先介紹一下對list去重復傳統的方法,代碼如下:

List reportList=GetReportList();

for (int i = 0; i < reportList.Count; i++)

{

for (int j = i + 1; j < reportList.Count; j++)

{

if (reportList[i].Equals(reportList[j]))

{

reportList.RemoveAt(reportList.LastIndexOf(reportList[i]));

j--;

}

}

}

通過這種方式對list 實現distinct操作顯然比較麻煩,如果還有其他的list實體集也需要實現類似的功能,那我們就會為代碼的可重用性擔心了。

下面使用簡單高效的方式去實現list的distinct功能,也是本文推薦的方式了

先創建一個Compare類,如下:

public delegate bool EqualsComparer(T x, T y);

public class Compare : IEqualityComparer

{

private EqualsComparer _equalsComparer;

public Compare(EqualsComparer equalsComparer)

{

this._equalsComparer = equalsComparer;

}

public bool Equals(T x, T y)

{

if (null != this._equalsComparer)

return this._equalsComparer(x, y);

else

return false;

}

public int GetHashCode(T obj)

{

return obj.ToString().GetHashCode();

}

}

這里在構造器中傳遞一個delegate,調用者可以在這個delegate定義比較規則,這樣具有了極大的靈活性,我們可以注意到Compare實現了IEqualityComparer接口來自定義比較對象,判斷兩個對象是否相等。使用方式如下:

ist requestList =Get RequestList ();

requestList =requestList.Distinct(new Compare((x, y) => (null != x && null != y) && (x.RequestorName.Equals(y.RequestorName)))).ToList();

用這種方式大大的擴展了比較器的使用范圍,增加了代碼的可重用性,可以適用于任何對象的比較。

比較后我們可以對起進行排序,使代碼也很簡潔。濟南軟件開發


手機:18678812288 E-Mail:1069706080@qq.com
地址:山東省濟南市舜耕路泉城公園東門園內向北50米 魯ICP備07011972號 版權所有2008-2013 新利體育18
Baidu