System.Collection.Generic命名空间中的List<T>类的用法非常类似于System.Collection命名空间的ArrayLisy类。这个类实现了IList,ICollection和IEnumerable接口,
例:Racer类作为添加到集合的元素,表示赛车手,包括两个字段:名字和汽车,可用属性来访问
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;
}
}
racer变量定义为List<Racer>类型。使用new操作符创建该类型一个新对象。这里使用List<T>类的默认构造函数。这个类的另一个构造函数为特定数量的元素预留了内存空间,还有一个构造函数负责从一个List<t>类型的集合中复制元素。
因为List<T>类用具体的Racer类实例化,所以现在只能用Add()方法增加racer对象,在List<T>类中,Add()方法定义为void Add(T item).在以下示例代码中,创建实例,并添加到集合中。接着使用foreach语句,迭代集合中的每个赛手,并显示到控制台上:
List<Racer> racers = new List<Racer>();
racers.Add(new Racer("MS","F"));
racers.Add(new Racer("JPM","MM"));
racers.Add(new Racer("KR","MM"));
racers.Add(new Racer("MW","WB"));
racers.Add(new Racer("RB","F"));
foreach (Racer r in racers)
{
Console.WriteLine(r);
}
在List<T>类中,不仅可以使用枚举添加和访问元素,还可以插入和删除元素,清空集合,把元素复制到数组中。下面讨论更强大的功能。List<T>提供方法可以搜索和转换元素,是元素逆序,等等。
1 查找元素
List<T>类提供了Find()和FindAll()方法,他们的声明如下:
public T Find (Predicate <T> match)
public T FindAll(Predicate <T> match)
这两种方法都把Predicate <T>作为参数。Predicate <T>是一个委托,它引用了个谓词方法。谓词是返回布尔值的方法。true表示有一个匹配,false表示没有。当为true是Find返回第一个匹配,FindAll返回所有元素。使用之前要先定义谓词。
public class FindRacer
{
private string car;
public FindRacer(string car)
{
this.car = car;
}
public bool DrivingCarPredicate(Racer racer)
{
return racer.Car == car;
}
}
要查找特定的赛手,应该使用F启动和初始化FindRacer类。使用List<T>类的FindAll()方法。FindAll方法,实例化一个谓词委托,这个谓词委托接受finder .DrivingCarPredicate方法。FindAll()返回一个List<Racer>类型的列表,再使用foreach迭代所有返回的赛手,并在控制台显示他们:
List<Racer> racers = new List<Racer>();
racers.Add(new Racer("MS","F"));
racers.Add(new Racer("JPM","MM"));
racers.Add(new Racer("KR","MM"));
racers.Add(new Racer("MW","WB"));
racers.Add(new Racer("RB","F"));
FindRacer finder = new FindRacer("F");
foreach (Racer racer in racers.FindAll(new Predicate<Racer>(finder.DrivingCarPredicate)))
{
Console.WriteLine(racer);
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hwg9741/archive/2008/06/03/2506345.aspx