2016-06-28 55 views
1

併爲奇怪的標題感到抱歉。如何從列表中提取子類及其所有子類?

還有就是我的類層次結構:

  • TimedObject
    • SpeedModifer
      • ImediateSpeedModifier
      • LinearSeedModifier
      • ...更多類..
    • ..更多類..

在文件,所有TimedObject的的實例是相同的陣列中(所以,一個List<TimedObject>)。我希望在加載數據之後,我想將每個SpeedModifier或子類移到另一個數組以解決性能問題。我已經知道Enumerable.OfType<T>()函數,但是這個函數在我的情況下工作嗎?那麼,它會工作爲ImediateSpeedModifier,和其他SpeedModifier

如果不是,我需要爲我的情況做些什麼?

謝謝你的回答!

回答

3

是的,它會工作,因爲類型爲ImmediateSpeedModifier的對象是SpeedModifier

documentation證實了這一點(重點煤礦):

OfType<TResult>(IEnumerable)方法只返回在源那些元素可投鍵入TResult

有在.NET框架,檢查是否有確切動態類型很少的方法,因爲亞型的能力來代替他們的超類型的使用是一個fundamental principle of object-oriented programming。僅在特殊情況下才需要檢查確切的類型(例如unit testing)。

+0

我還沒有在文檔中看到這個,謝謝! –

0

Enumerable.OfType<T>()將工作。所以:

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