【发布时间】:2011-04-02 18:00:43
【问题描述】:
我想创建一个严格遵循以下结构的层次结构:
(1) INodeBase - 包含作为自身集合的 Children 属性 (INodeBase)
(2) INodeFolder - 派生自 INodeBase。
(3) NodeFolder - 实现 INodeFolder。 Children 属性的实现应该允许它包含 INodeFolder 类型和 INodeItem 类型的项目。
(4) INodeItem - 派生自 INodeBase。
(5) NodeItem - 实现 INodeItem。 Children 属性的实现应该允许它包含 NodeResult 类型的项目。
(6) INodeResult - 派生自 INodeBase。
(7) NodeResult - 实现 INodeResult - 我不需要/想要此类中的 children 属性,但是,如果可以正确构建整个层次结构,我愿意在类中挂起一个空集合。
本质上,我想要一个节点的基本类型 - 并且假设应该是一个节点可以包含其他节点。我认为泛型是要走的路 - 但是 - 问题是,如果我查询整个分层集合,或者更确切地说,如果我过滤它,当我递归地遍历每个孩子的孩子集合时(即展平我的集合),我想知道什么是什么 - 即,如果我在一个文件夹的 Children 集合中,我想知道我什么时候点击了 FolderNode,什么时候点击了 ItemNode,然后当我通过 Children 的属性进行递归时一个ItemNode,我想知道我只是在处理NodeResult类型。
那么,上述情况的最佳方法是什么?
克里斯
【问题讨论】:
-
您可以查看 XPathNavigator 作为非常相似的层次结构的示例,以查看可以使用哪些操作和访问节点的方法 - msdn.microsoft.com/en-us/library/…
标签: c# linq generics interface lambda