如何从列表中提取子类及其所有子类

本文关键字:子类 提取 列表 | 更新日期: 2023-09-27 17:51:26

,不好意思,标题有点怪。

这是我的类层次结构:

  • TimedObject
    • SpeedModifer
      • ImediateSpeedModifier
      • LinearSeedModifier
      • . .更多类…
    • . .更多类…

在文件中,所有TimedObject的实例都在同一个数组中(因此,一个List<TimedObject>)。我想,在数据加载后,我想移动每个SpeedModifier或子类到另一个数组的性能问题。我已经知道Enumerable.OfType<T>()函数,但这个函数在我的情况下工作吗?那么,它是否适用于ImediateSpeedModifier和其他SpeedModifier ?

如果没有,我需要为我的案例做些什么?

谢谢你的回答!

如何从列表中提取子类及其所有子类

可以,因为类型为ImmediateSpeedModifier 的对象是 SpeedModifier

文档证实了这一点(强调我的):

OfType<TResult>(IEnumerable)方法只返回源中可以被转换为TResult类型的元素。

在。net框架中很少有方法检查精确的动态类型,因为使用子类型来代替它们的超类型是面向对象编程的基本原则。检查确切的类型只需要在特殊情况下(例如单元测试)。

Enumerable.OfType<T>()可以。所以:

var list = new List<TimedObject>();
//load data into list
var filteredList = list.OfType<SpeedModifer>();