2013-10-15 19 views
1

我有一個列表如何寫出來的派生類的內容列表

List <RootClass> classes = new List<RootClass>(); 

RootClass是一個抽象類外面我獲得其他兩個類:SubClass1和SubClass2。 在節目中我通過以下方式創建新類:

classes.Add(new SubClass1(arg1, arg2)); 
classes.Add(new SubClass2(arg1, arg2)); 

現在,讓我們說,我有SubClass1的20,並在類表20個SubClass2。 我如何爲列表中的所有SubClass1實例寫出一個字段?

我想:

foreach(SubClass1 sc1 in classes){ 
    Console.WriteLine(sc1.field1); 
} 

但似乎編譯器試圖施放的每個對象在列表中它是否是一個類型SubClass1或SubClass2,所以它拋出一個轉換異常,當它試圖用這樣做鍵入SubClass2。

我也做:

foreach (RootClass rc in classes){ 
if (rc is Subclass1){ 
    SubClass1 sc1 = rc as SubClass1; 
    ConsoleWriteLine(sc1.field1); 
} 
} 

它正常工作與後者的解決方案,問題是,在節目中我'寫我要重複很多次,每一次修改不同的領域,不同的方式,所以我的問題是有沒有更深刻的方式來做到這一點?

+0

什麼是'名單'的責任? –

+1

你可以使用'OfType',例如:'foreach(var in classes.OfType ())' –

+0

如果你經常需要這些部分列表並且迭代所有的子類,那麼爲每個'Subclass'維護一個列表可能會更有意義他們當你需要完整的列表。 – lukegravitt

回答

1

可以使用OfType擴展方法

foreach (var sub in classes.OfType<SubClass1>()) 
{ 
    Console.WriteLine(sub .field1); 
} 
3
var result = classes.OfType<subtype>(); 
相關問題