在C#中查找数组中给定类型的元素

时间:2010-02-09 09:06:34

标签: c# types

我有一个包含一系列(基类)车辆的Fleet类。阵列中的车辆是车辆的子类:平原,火车和汽车。该阵列是私有的,但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#书中查找它们......

谢谢!

3 个答案:

答案 0 :(得分:12)

你的Fleet.Get()看起来像

public IEnumerable<T> Get<T>()
{
  return _vehicles.OfType<T>();
}

答案 1 :(得分:1)

将其设为List<>并使用FindAll(x => x.GetType() == typeof(Train))从列表中获取所有列车对象。

答案 2 :(得分:0)

 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();
 }