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

时间:2016-06-28 09:05:37

标签: c#

抱歉这个怪异的头衔。

我的班级层次结构:

  • TimedObject
    • SpeedModifer
      • ImediateSpeedModifier
      • LinearSeedModifier
      • ..更多课程..
    • ..更多课程..

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

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

感谢您的回答!

2 个答案:

答案 0 :(得分:3)

是的,它会起作用,因为ImmediateSpeedModifier 类型的对象是 SpeedModifier

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

  

OfType<TResult>(IEnumerable)方法仅返回源可以投射的元素TResult

.NET框架中很少有方法可以检查精确动态类型,因为使用子类型代替其超类型的能力是fundamental principle of object-oriented programming。仅在特殊情况下才需要检查完全类型(例如unit testing)。

答案 1 :(得分:0)

Enumerable.OfType<T>()会奏效。所以:

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