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值
- 子节点可以访问父节点并设置父节点的IsEnabled值
- 中间节点可以同时设置子节点和父节点 IsEnabled 值
- 中间节点子节点或父节点也可以是中间节点
- 父模型、子模型和中间模型永远不会相同。
我不需要 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; }
}
遍历树时,您可以跟踪当前节点的深度以确定您是在根节点、叶节点还是中间节点。
这个模型意味着根将有一个空父节点,但如果你想要树的任意深度,这是不可避免的。但我可能会主张删除父引用,而是在遍历树时还要跟踪父引用。
您好,我尝试实现如图所示的这个想法: 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值
- 子节点可以访问父节点并设置父节点的IsEnabled值
- 中间节点可以同时设置子节点和父节点 IsEnabled 值
- 中间节点子节点或父节点也可以是中间节点
- 父模型、子模型和中间模型永远不会相同。
我不需要 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; }
}
遍历树时,您可以跟踪当前节点的深度以确定您是在根节点、叶节点还是中间节点。
这个模型意味着根将有一个空父节点,但如果你想要树的任意深度,这是不可避免的。但我可能会主张删除父引用,而是在遍历树时还要跟踪父引用。