如何从列表中提取子类及其所有子类
本文关键字:子类 提取 列表 | 更新日期: 2023-09-27 17:51:26
,不好意思,标题有点怪。
这是我的类层次结构:
-
TimedObject
-
SpeedModifer
-
ImediateSpeedModifier
-
LinearSeedModifier
- . .更多类…
-
- . .更多类…
-
在文件中,所有TimedObject的实例都在同一个数组中(因此,一个List<TimedObject>
)。我想,在数据加载后,我想移动每个SpeedModifier或子类到另一个数组的性能问题。我已经知道Enumerable.OfType<T>()
函数,但这个函数在我的情况下工作吗?那么,它是否适用于ImediateSpeedModifier
和其他SpeedModifier
?
如果没有,我需要为我的案例做些什么?
谢谢你的回答!
可以,因为类型为ImmediateSpeedModifier
的对象是 SpeedModifier
。
文档证实了这一点(强调我的):
在。net框架中很少有方法检查精确的动态类型,因为使用子类型来代替它们的超类型是面向对象编程的基本原则。检查确切的类型只需要在特殊情况下(例如单元测试)。
OfType<TResult>(IEnumerable)
方法只返回源中可以被转换为TResult
类型的元素。
Enumerable.OfType<T>()
可以。所以:
var list = new List<TimedObject>();
//load data into list
var filteredList = list.OfType<SpeedModifer>();