代码来源于"c#高级编程(第4版)",略作修改
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;


namespace Wrox.ProCSharp.VectorAsCollection

...{
class MainEntryPoint

...{
static void Main(string[] args)

...{

List<Racer> racers = new List<Racer>();
racers.Add(new Racer("Michael Schumacher", "Ferriai"));
racers.Add(new Racer("Juan Pablo Montoya", "McLaren-Mercedes"));
racers.Add(new Racer("Kimi Railkkonen", "McLaren-Mercedes"));
racers.Add(new Racer("Mark Webber", "Williams-BMW"));
racers.Add(new Racer("Rubens Barichello", "Ferriai"));

//遍历List
foreach (Racer R in racers)

...{
Console.WriteLine(R);
}

Console.WriteLine(" ----------FindAll Method Demo------------- ");

//查找findAll
FindRacer finder = new FindRacer("Ferriai");
foreach (Racer r in racers.FindAll(new Predicate<Racer>(finder.DrivingCarPredicate)))//Predicate是一个泛型的委托
//foreach (Racer r in racers.FindAll(new Predicate<Racer>(FindFerriai)))//就本例而言,查找开Farriai的Racer,也可以这样写,但这样不灵活,没办法将参数传入委托

...{
Console.WriteLine(r);
}

Console.WriteLine(" ----------Find Method Demo-------------");
//Find方法(若找到的结果不止一条时,显示第一条)
FindRacer f2 = new FindRacer("McLaren-Mercedes");

Racer R2 = racers.Find(new Predicate<Racer>(f2.DrivingCarPredicate));

if (R2 != null)

...{
Console.WriteLine(R2);
}
else

...{
Console.WriteLine("No racer drive McLaren-Mercedes ");
}

Console.WriteLine(" ----------FindLast Method Demo-------------");
FindRacer f3 = new FindRacer("McLaren-Mercedes");

Racer R3 = racers.FindLast(new Predicate<Racer>(f2.DrivingCarPredicate));

if (R3 != null)

...{
Console.WriteLine(R3);
}
else

...{
Console.WriteLine("No racer drive McLaren-Mercedes ");
}

Console.ReadLine();
}


//static bool FindFerriai(Racer R)
//{
// return R.Car == "Ferriai";
//}


}



/**//**/

/**//// <summary>
/// 查找Racer的类(根据car查找)
/// </summary>
public class FindRacer

...{
private string _car;
public FindRacer(string car)

...{
this._car = car;
}

public bool DrivingCarPredicate(Racer r)

...{
return r.Car == _car;
}
}


/**//**/

/**//// <summary>
/// Racer类
/// </summary>
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;
}

}
}
运行结果:
Michael Schumacher,Ferriai
Juan Pablo Montoya,McLaren-Mercedes
Kimi Railkkonen,McLaren-Mercedes
Mark Webber,Williams-BMW
Rubens Barichello,Ferriai
----------FindAll Method Demo-------------
Michael Schumacher,Ferriai
Rubens Barichello,Ferriai
----------Find Method Demo-------------
Juan Pablo Montoya,McLaren-Mercedes
----------FindLast Method Demo-------------
Kimi Railkkonen,McLaren- Mercedes