C#多级节点树

C# multi level node tree

您好,我尝试实现如图所示的这个想法: node tree

public interface IChildNode
{
    public bool IsEnabled { get; set; }

    public IParentNode Parent { get; set; }
}


public interface IParentNode
{
    public bool? IsEnabled { get; set; }

    public List<IChildNode> Childrens { get; set; }
}

public interface IIntermediateNode
{
    public bool? IsEnabled { get; set; }

    public IParentNode Parent { get; set; }

    public List<IChildNode> Childrens { get; set; }
}

如果节点树只包含父节点和子节点,那将是完美的代码,问题是它必须是通用的。

需要实现的逻辑:

我不需要 IsEnabled 值的计算逻辑。

帮助我实现所需的目标:我只需要此逻辑的架构(如何设置类或接口以支持所需的逻辑)

下面的代码示例:

案例一

public class Parent : IParentNode
{

}

public class Intermediate : IIntermediateNode
{

}

public class Intermediate2 : IIntermediateNode
{

}

public class Child : IChildNode
{

}

案例二

public class Parent : IParentNode
{

}


public class Child : IChildNode
{

}

案例三

public class Parent : IParentNode
{

}

public class Intermediate : IIntermediateNode
{

}

public class Child : IChildNode
{

}

您通常不会使用类型来描述节点在树中的级别,因为这会极大地限制您可以建模的问题类型。你真的只需要一个界面:

public interface INode
{    
    public bool? IsEnabled { get; set; }
    public INode Parent { get; set; }
    public List<INode> Childrens { get; set; }
}

遍历树时,您可以跟踪当前节点的深度以确定您是在根节点、叶节点还是中间节点。

这个模型意味着根将有一个空父节点,但如果你想要树的任意深度,这是不可避免的。但我可能会主张删除父引用,而是在遍历树时还要跟踪父引用。