您的位置:首页 > 编程语言 > C#

C#中使用List类

2008-04-03 10:58 176 查看
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);

}

2 执行操作

模板委托不仅可以在Find()/FindAll()方法中使用,还可以对每个元素执行一些操作。List<T>类提供了ForEach()方法,它使用Action<T>委托对集合中的每个元素执行操作.Action<T>委托的返回类型是void.

3 排序

4 类型转换
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: