我有一个包含(基类)车辆数组的Fleet类。数组中的车辆是车辆的子类: Plains、Trains和Automobiles。该数组是私有的,但Fleet类必须提供一个方法来获取给定类型的车辆。
类似于:
class Fleet
{
private Vehicle[] _vehicles;
// returns the vehicles of the specified subclass
public ???? Get(????)
{
return ????
}
}
Fleet fleet = new Fleet("fleet.def");
Trains[] trains = fleet.Get(Trains); // looks clean but isn't possible
Plains[] plains = fleet.Get<Plains>(); // looks okay but don't know
// how to implement(我使用的是数组,但实际上任何可以迭代的集合类型都可以。)
现在,如你所见,我完全不知道如何实现它。我正在为Get方法寻找一个优雅的解决方案,效率并不是真正的问题。还请列出解决方案中涉及的关键技术,这样我就可以在我的C#书籍中查找它们……
谢谢!
发布于 2010-02-09 17:16:10
您的Fleet.Get()将如下所示
public IEnumerable<T> Get<T>()
{
return _vehicles.OfType<T>();
}发布于 2010-02-09 17:10:57
将其设置为List<>,并使用FindAll(x => x.GetType() == typeof(Train))从列表中获取所有的Train对象。
发布于 2010-02-09 17:17:43
public T[] Get<T>() where T : Vehicle
{
List<Vehicle> lstVehicles = new List<Vehicle>(_vehicles);
return lstVehicles.FindAll(delegate(Vehicle vehicle){
return vehicle.GetType() == typeof(T);
}).ToArray();
}https://stackoverflow.com/questions/2227856
复制相似问题