程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用代理實現對C# list distinct操作

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

編輯:C#入門知識

范型在c#編程中經常使用,而經常用list 去存放實體集,因此會設計到對list的各種操作,比較常見的有對list進行排序,查找,比較,去重復。而一般的如果要對list去重復如果使用linq distinct方式,會遇到一些坑爹的問題,發現結果集中還是存在重復數據,原因是使用這種方法是對對象的引用去重復,並不滿足我們的需求。因此本文通過c#代理的方式實現對list distinct操作。   先介紹一下對list去重復傳統的方法,代碼如下:     List<ReviewersReport> 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>(T x, T y);     public class Compare<T> : IEqualityComparer<T>     {         private EqualsComparer<T> _equalsComparer;           public Compare(EqualsComparer<T> 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<ReviewersReport> requestList =Get RequestList (); requestList =requestList.Distinct(new Compare<Requestor>((x, y) => (null != x && null != y) && (x.RequestorName.Equals(y.RequestorName)))).ToList(); 用這種方式大大的擴展了比較器的使用范圍,增加了代碼的可重用性,可以適用於任何對象的比較。   比較後我們可以對起進行排序,使代碼也很簡潔。    View Code  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved