本人初学泛型,先遇到一个问题不知如何去解,有请各位帮忙解答一下,唯有及时送分感谢:
源程序:
using System;
using System.Collections;
using System.Collections.Generic;namespace Test
{
    public class Racer
    {
        private string name;
        public string Name
        {
            get { return name; }
        }        private string car;
        public string Car
        {
            get { return car; }
        }
        public Racer(string name, string car)
        {
            this.name = name;
            this.car = car;
        }        public override string ToString()
        {
            return name + ", " + car;
        }        public static void Main()
        {
            List<Racer> racers = new List<Racer>()
            {
                new Racer("Michael Schumacher", "Ferrari"),
                new Racer("Juan Pablo Montoya", "McLaren-Mercedes"),
                new Racer("Kimi Raikkonen", "McLaren-Mercedes"),
                new Racer("Mark Webber", "Williams-BMW"),
                new Racer("Rubens Barichello", "Ferrari")
            };
            racers.Sort(new RacerComparer(RacerComparer.CompareType.Car));
            foreach (Racer racer in racers)
            {
                Console.WriteLine(racer.ToString());
            }            Console.ReadLine();
        }
    }    public class RacerComparer : IComparer<Racer>
    {
        public enum CompareType
        {
            Name,
            Car
        }
        private CompareType compareType;
        public RacerComparer(CompareType compareType)
        {
            this.compareType = compareType;
        }        public int Compare(Racer x, Racer y)
        {
            int result = 0;
            switch (compareType)
            {
                case CompareType.Name:
                    result = x.Name.CompareTo(y.Name);
                    break;
                case CompareType.Car:
                    result = x.Car.CompareTo(x.Car);
                    break;
            }
            return result;
        }
    }
}
已按照书上的讲解写出来了,可是为何显示的时候还不是按“Car”来排序的呢?

解决方案 »

  1.   

    public int Compare(Racer x, Racer y) 
            { 
                switch (compareType) 
                { 
                    case CompareType.Name: 
                        return x.Name.CompareTo(y.Name); 
                    case CompareType.Car: 
                        return  x.Car.CompareTo(x.Car); 
                    default:
                        return x.Name.CompareTo(y.Name);
                } 
            } 
      

  2.   

    因为你写的是:    return  x.Car.CompareTo(x.Car); 
    另外,其实如果引用System.Linq命名空间之后代码可以写:    racers.OrderBy(x => x.car)
             .Where(x => { Console.WriteLine(x.ToString()); return false; })
             .Count();
      

  3.   

    result = x.Car.CompareTo(x.Car);这句错了,是result = x.Car.CompareTo(y.Car);