簡體   English   中英

ASP.NET中的繼承和緩存

[英]Inheritance and caching in ASP.NET

我有一些類層次結構-名為“ Group”的基類,其中包含有關單個組的基本信息,以及名為“ RootGroup”的類,該類繼承自“ Group”,並使用某些屬性擴展了基類。 組列表使用基類存儲在高速緩存中:例如IEnumerable(其中一些是普通組,一些是根組。關鍵是從緩存中檢索集合並將其強制轉換回IEnumerable類型,具體RootGrop項目的信息丟失了,除了記住每個緩存項目的類型之外,是否有其他方法可以防止這種情況發生?

吉米

如果我正確理解您的問題,那么您的RootGroup屬性不會“丟失”。 問題是您具有RootGroup對象的Group視圖。 為了訪問RootGroup屬性,必須將對象RootGroup轉換為RootGroup

一個簡單的檢查:

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

您可以在檢索每個項目時對其進行檢查,並將其轉換為正確的類型:

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)...

其他方式...

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

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

這具有與延遲執行相關的各種優點,但是如果沒有更多細節,我無法真正分辨出是否有區別。 就像提到的其他帖子一樣,與子類相關的信息也不會丟失,您只需將其放在可訪問的形式即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM