九九热这里直有精品,1区二区三区在线播放,玖玖爱在线观看资源,国产aⅴ综合网,午夜福利男女,日本亚洲欧美三级,日韩无码黄色导航,内射少妇13区,中文字幕高清网

您身邊的軟件定制專家--9年開發(fā)經(jīng)驗(yàn)為您護(hù)航

18678812288
0531-88887250

使用代理實(shí)現(xiàn)對C# list distinct操作

文章作者:濟(jì)南軟件開發(fā) 時(shí)間:2016年12月20日

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

 

先介紹一下對list去重復(fù)傳統(tǒng)的方法,代碼如下:

 

 

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 實(shí)現(xiàn)distinct操作顯然比較麻煩,如果還有其他的list實(shí)體集也需要實(shí)現(xiàn)類似的功能,那我們就會為代碼的可重用性擔(dān)心了。

 

 

 

下面使用簡單高效的方式去實(shí)現(xiàn)list的distinct功能,也是本文推薦的方式了

 

先創(chuàng)建一個(gè)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();

        }

}

 

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

 

ist<ReviewersReport> requestList =Get RequestList ();

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

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

 

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


想要了解更多詳情歡迎來電咨詢18678812288
登陸網(wǎng)址:m.h6244.cn。
聯(lián)系人:王經(jīng)理。

漾濞| 峨眉山市| 团风县| 达州市| 义乌市| 广南县| 和平县| 河南省| 峡江县| 新野县| 西乌珠穆沁旗| 胶州市| 元阳县| 滨海县| 裕民县| 新邵县| 伽师县| 福建省| 丹江口市| 丘北县| 读书| 佳木斯市| 金乡县| 固原市| 建水县| 济南市| 古田县| 彭州市| 海林市| 西充县| 黑龙江省| 呼玛县| 桂林市| 汝城县| 临江市| 永春县| 北川| 松溪县| 通榆县| 商南县| 禹州市|