2011-11-02 46 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

与延迟执行相关联。这有各种各样的礼节,但没有更详细的我真的不能告诉,如果有差别。和其他帖子一样,您的与孩子课程相关的信息不会丢失,您只需将其放入可访问的表单即可。