抱歉这个怪异的头衔。
我的班级层次结构:
TimedObject
SpeedModifer
ImediateSpeedModifier
LinearSeedModifier
在文件中,所有TimedObject的实例都在同一个数组中(因此,List<TimedObject>
)。我想,在加载数据之后,我想将每个SpeedModifier或子类移动到另一个阵列以解决性能问题。我已经知道了Enumerable.OfType<T>()
函数,但这个函数在我的情况下是否有效?那么,它是否适用于ImediateSpeedModifier
和其他SpeedModifier
?
如果没有,我需要为我的案件做些什么?
感谢您的回答!
答案 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>();