using System; using System.Collections.Generic; using System.Text; namespace List_T_Sample { public class Racer { private string name; public string Name { get{return name;} set{name=value;} } private string car; public string Car { get { return car;} set{car =value ;} } public Racer(string name, string car) { this.name = name; this.car = car; } public override string ToString() { return name+","+car; } } public class FindRacer { private string car; public FindRacer(string car) { this.car = car; } public bool DrivingCarPredicate(Racer racer) { return racer.Car == car; } } public class RacerComparer : IComparer { 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(y.Car); break; } return result; } } public class Person { private string firstname; private string lastname; public Person(string firstname, string lastname) { this.firstname = firstname; this.lastname = lastname; } public override string ToString() { return firstname + " " + lastname; } } class Program { static void Main(string[] args) { //增加Racer实例 List racers = new List (); racers.Add(new Racer("Michael Schumacher", "Ferrari")); racers.Add(new Racer("Juan Pablo Montoya","Mclaren")); racers.Add(new Racer("Kimi Raikkonen","Ferrari")); racers.Add(new Racer("Mark Webber", "BMW")); //循环显示List foreach (Racer r in racers) { Console.WriteLine(r); } Console.WriteLine(); //Predicate查找Ferrari FindRacer finder = new FindRacer("Ferrari"); foreach (Racer racer in racers.FindAll(new Predicate (finder.DrivingCarPredicate))) { Console.WriteLine(racer); } Console.WriteLine(); //单独写一条新建Predicate 的委托,查找Ferrari Predicate pr = new Predicate (finder.DrivingCarPredicate); foreach (Racer racer in racers.FindAll(pr)) { Console.WriteLine(racer); } Console.WriteLine(); //ForEach,Action委托 Action action_racer = new Action (display); racers.FindAll(pr).ForEach(action_racer); Console.WriteLine(); //ForEach,Action事件 MyDisplayEvent += new Action (display); racers.FindAll(pr).ForEach(MyDisplayEvent); Console.WriteLine(); //ForEach,匿名方法 racers.FindAll(new Predicate (finder.DrivingCarPredicate)) .ForEach(delegate(Racer r) { Console.WriteLine(r); }); Console.WriteLine(); //Sort 匿名方法 racers.Sort(delegate(Racer r1, Racer r2) { return r1.Name.CompareTo(r2.Name); }); foreach (Racer r in racers) { Console.WriteLine(r); } Console.WriteLine(); //Sort,Comparison委托, Comparison comparison_racer = new Comparison (compareName); racers.Sort(comparison_racer); foreach (Racer r in racers) { Console.WriteLine(r); } Console.WriteLine(); //Sort,Comparison事件 MyComparisonNameEvent += new Comparison (compareName); racers.Sort(MyComparisonNameEvent); foreach (Racer r in racers) { Console.WriteLine(r); } Console.WriteLine(); //Sort,RacerComparer类 racers.Sort(new RacerComparer(RacerComparer.CompareType.Car)); foreach (Racer r in racers) { Console.WriteLine(r); } Console.WriteLine(); //ConvertAll 匿名方法 List persons1 = racers.ConvertAll (delegate(Racer r) { int ixSeparator = r.Name.LastIndexOf(" ") + 1; string lastname = r.Name.Substring(ixSeparator, r.Name.Length - ixSeparator); string firstname = r.Name.Substring(0, ixSeparator - 1); return new Person(firstname, lastname); }); foreach (Person p in persons1) { Console.WriteLine(p); } Console.WriteLine(); //ConvertAll 委托 Converter converter_person = new Converter (convertPerson); List persons2 = racers.ConvertAll (converter_person); foreach (Person p in persons2) { Console.WriteLine(p); } Console.WriteLine(); //ConvertAll 事件 MyConverterPersonEvent += new Converter (convertPerson); List persons3 = racers.ConvertAll (MyConverterPersonEvent); foreach (Person p in persons3) { Console.WriteLine(p); } Console.WriteLine(); } //----------- private static void display(Racer r) { Console.WriteLine(r); } private static event Action MyDisplayEvent; //----------- private static int compareName(Racer r1, Racer r2) { return r1.Name.CompareTo(r2.Name); } private static event Comparison MyComparisonNameEvent; //----------- private static Person convertPerson(Racer r) { int ixSeparator = r.Name.LastIndexOf(" ") + 1; string lastname = r.Name.Substring(ixSeparator, r.Name.Length - ixSeparator); string firstname = r.Name.Substring(0, ixSeparator - 1); return new Person(firstname, lastname); } private static event Converter MyConverterPersonEvent; } }