本人初学泛型,先遇到一个问题不知如何去解,有请各位帮忙解答一下,唯有及时送分感谢:
源程序:
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”来排序的呢?
源程序:
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”来排序的呢?
{
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);
}
}
另外,其实如果引用System.Linq命名空间之后代码可以写: racers.OrderBy(x => x.car)
.Where(x => { Console.WriteLine(x.ToString()); return false; })
.Count();