2013-05-30 39 views
2

我有許多類都從基類繼承 - 這實際上是一個簡單的包裝器的接口,以允許串行化從而:鑄造列表<baseclass>到列表<derivedclass>

public abstract class VoucherRuleBase : IRule{ 
    public abstract bool Save(int nodeID); 
} 

public class ActiveDateRule : VoucherRuleBase{ 
    public DateTime ActiveDateRuleProperty{get;set;} 
    ...etc 
} 

我然後有一個List<VoucherRuleBase>其中包含一些ActiveDateRule對象,或其他派生類的數量。該列表總是充滿相同的類型,即。所有的ActiveDateRules或其他派生類之一。

我需要將List轉換爲列表,因爲我試圖將列表綁定到網格,但是由於網格只能看到它沒有找到任何屬性的基類。在運行時,.NET知道'真實'類型,只是在編譯時我無法將其轉換。這是因爲它是不可能的 - 沒有每個派生類都有一些構造函數來執行轉換?

我搜索過這裏確實有類似這樣的其他問題,但我沒有與任何解決方案運氣..

任何幫助非常感謝如初.. 感謝

回答

3

有你試過myList.Cast<BaseClass>

+0

這就是他們已經擁有的。 – Jon

+4

道歉它將列表傳遞給一個沒有重新編譯並設置爲基類的控件.. doh! both:.OfType ()和.Cast ()工作.. – nat

1

嘗試使用as

List<VoucherRuleBase> voucherRules = new List<VoucherRuleBase>(); 
var activeDateRules = voucherRules.Select(x => x as ActiveDateRule); 

你不這樣做隱式轉換這種方式,你可以通過使用Where和過濾類型不null過濾掉對象。

var activeDateRules = voucherRules.Select(x => x as ActiveDateRule).Where(x => x != null); 
0

這裏baseClasses是你的基類的列表。 DerivedClass1是你的老師。

var derivedClasses = baseClasses.Where(item => item.GetType() == typeof(DerivedClass1)).ToList();