加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在c#中管理父子实现树

发布时间:2020-12-16 01:29:35 所属栏目:百科 来源:网络整理
导读:我正在实现一个树,把它想象成一个文件夹结构,所以我有一个看起来像这样的类: public class Folder{ //Various Props like Name etc. public IListFolder Children{get;} public Folder Parent {get;}} 现在我想要的是能够在树上走来走去,所以给了一个根,我
我正在实现一个树,把它想象成一个文件夹结构,所以我有一个看起来像这样的类:

public class Folder
{
    //Various Props like Name etc.
    public IList<Folder> Children{get;}
    public Folder Parent {get;}
}

现在我想要的是能够在树上走来走去,所以给了一个根,我可以找到一片叶子,并给出一片叶子,我可以找到根节点.所以每个孩子都需要父母.现在问题是将新节点添加到树的最佳方法是什么.我过去使用过两种解决方案:

>将AddChild(Folder)方法添加到处理添加文件夹的Folder,并设置父级.这个问题是我现在必须锁定我的Children集合,所以你不能绕过这个方法.
>创建我自己的Children集合,该集合将被提供给实例的引用,因此它可以处理在add上设置父级.这个问题我必须实现一个新的集合.
>使用在添加或删除项目时具有事件的集合.

我很好奇人们通常使用什么模式,然后如果有人对我的具体用例有任何建议.我正在使用nHibernate将我的树持久化到SQL服务器.我宁愿不实现自定义集合,因为它是很多代码,可以让它适用于我的应用程序的一小部分.

解决方法

看完 on MSDN之后你可以试试这个:

List<Folder> children;

public ReadOnlyCollection<Folder> Children
{
    get { return this.children.AsReadOnly(); }
}

如果您的私有成员必须声明为IList,那么我们可以将其复制到列表中然后返回它.但我真的没有看到使用具体实现作为私有成员的问题.稍后更改实现不会破坏兼容性.

IList<Folder> children;

public ReadOnlyCollection<Folder> Children
{
    get 
    { 
        return new List<Folder>(this.children).AsReadOnly(); 
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读