首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#的数组中查找给定类型的元素

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

Stack Overflow用户
提问于 2010-02-09 17:06:34
回答 3查看 190关注 0票数 3

我有一个包含(基类)车辆数组的Fleet类。数组中的车辆是车辆的子类: Plains、Trains和Automobiles。该数组是私有的,但Fleet类必须提供一个方法来获取给定类型的车辆。

类似于:

代码语言:javascript
复制
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#书籍中查找它们……

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-09 17:16:10

您的Fleet.Get()将如下所示

代码语言:javascript
复制
public IEnumerable<T> Get<T>()
{
  return _vehicles.OfType<T>();
}
票数 12
EN

Stack Overflow用户

发布于 2010-02-09 17:10:57

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

票数 1
EN

Stack Overflow用户

发布于 2010-02-09 17:17:43

代码语言:javascript
复制
 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();
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2227856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档