2011-11-02 45 views
0

我有一些類層次結構 - 名爲「Group」的基類,它包含有關單個組的基本信息,以及從「Group」繼承的名爲「RootGroup」的類並擴展了基礎有一些屬性的類。組列表使用基類存儲在緩存中:例如IEnumerable(其中一些是普通組,其中一些是根組,其中一些是根組),問題是何時從緩存中檢索集合並將其轉換回IEnumerable類型,RootGrop項目的特定信息會丟失。這種情況下,除了記住每一個緩存項的類型?ASP.NET中的繼承和緩存

吉米

回答

0

如果我明白你的問題正確,你的RootGroup性質不被「丟失」。問題是你有一個Group視圖RootGroup對象。要訪問RootGroup屬性,必須將該對象投射到RootGroup

一個簡單的檢查:

if(groupItem is RootGroup) 
{ 
     RootGroup rootGroupItem = groupItem as RootGroup; 
     // Do stuff 
} 
0

爲您檢索它您可以檢查每個項目,並把它轉換爲適當類型:

foreach (object item in list) { 
    if (item is RootGroup) { 
    Rootgroup rootGroup = item as RootGroup; 
    // do stuff with rootGroup 
    } 
} 

如果您使用的是通用的集合,如List<Group>,你可以改變這樣在foreach:

foreach (Group item in list)... 
+0

'as'使用第二個條件來檢查'item是否是RootGroup'。考慮直接轉換而不是'as',除非你期望顯式的運算符和繼承。 –

+0

imo,'as'更好看。如果你擔心這樣簡單的檢查,你可能使用了錯誤的語言。 –

0

另一種方式......

//from cache 
IEnumerable<Group> groupsFromCache = GetGroupsFromCache(); 
IEnumerable<RootGroup> rootGroups = groupsFromCache.OfType<RootGroup>(); 

http://www.thinqlinq.com/default/Using-Cast-Or-OfType-Methods.aspx

與延遲執行相關聯。這有各種各樣的禮節,但沒有更詳細的我真的不能告訴,如果有差別。和其他帖子一樣,您的與孩子課程相關的信息不會丟失,您只需將其放入可訪問的表單即可。