首页 新闻 搜索 专区 学院

泛型集合排序问题

0
悬赏园豆:10 [已解决问题] 解决于 2014-09-06 20:12

namespace ABC
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Contact> list = new List<Contact>() { new Contact(){FirstName="A",LastName="B"},
            new Contact(){FirstName="A",LastName="A"},new Contact(){FirstName="A",LastName="C"},
            };
           //Compare(Contact x, Contact y)怎么把写好的方法带入下面的红色函数
            list = list.Sort(“函数”);
           
        }
    }
    class Contact
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    class NameCompare : IComparer<Contact>
    {
        public int Compare(Contact x, Contact y)
        {
            int result;
            if (Contact.ReferenceEquals(x, y))
            {
                result = 0;
            }
            else
            {
                if(x==null)
                {
                    result=1;
                }
                else if (y == null)
                {
                    result = -1;
                }
                else
                {
                    result = StringCompare(x.LastName, y.LastName);
                        if(result==0)
                        {
                            result=StringCompare(x.FirstName,y.FirstName);
                        }
                }
            }
            return result;
        }
        private static int StringCompare(string x, string y)
        {
            int result;
            if (x == null)
            {
                if (y == null)
                {
                    result = 0;
                }
                else
                {
                    result = 1;
                }
            }
            else
            {
                result = x.CompareTo(y);
            }
            return result;
        }
    }
}

荣码一生的主页 荣码一生 | 初学一级 | 园豆:163
提问于:2014-09-04 22:45
< >
分享
最佳答案
0

参考:Sort 方法 (泛型 IComparer)

list.Sort有三个重载,这个是其中之一,按照你的定义,你可以:

ICompare compare = new NameCompare();

list.Sort(compare);

 

此外,你的NameCompare的StringCompare偶点多此一举。最简单的,可以使用:Compare 方法 (String, String,此外还有Compare 方法 (String, String, StringComparison)等等。开发中尽量使用系统已有的实现,这样可以规范、减少工作量,还不会有错(自己写的难免有错,调试很费时间),而且性能也相对高点。

收获园豆:8
519740105 | 大侠五级 |园豆:5810 | 2014-09-05 06:34

Yeah!

幻天芒 | 园豆:36781 (高人七级) | 2014-09-05 09:38

带入报错。

ICompare compare = new NameCompare();

list.Sort(compare);

改成这样,能运行了

IComparer<Contact> compare = new NameCompare();

list.Sort(compare);

多谢二位解答。问题解决了。StringCompare确实有点多次一举。学习扩张方法时,写的例子,呵呵。

荣码一生 | 园豆:163 (初学一级) | 2014-09-06 20:11

园豆没法分,你们别介意

荣码一生 | 园豆:163 (初学一级) | 2014-09-06 20:13

@小艾123: 豆是小事,尊重与理解第一。

519740105 | 园豆:5810 (大侠五级) | 2014-09-06 21:15

@519740105: 恩恩

荣码一生 | 园豆:163 (初学一级) | 2014-09-06 21:58

@小艾123: :)

幻天芒 | 园豆:36781 (高人七级) | 2014-09-07 18:35
其他回答(1)
0

new NameCompare()

收获园豆:2
幻天芒 | 园豆:36781 (高人七级) | 2014-09-04 23:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册