C# 如何递归地分配属性?
我在这里有一个基本的抽象类:C# 如何递归地分配属性?,c#,inheritance,recursion,C#,Inheritance,Recursion,我在这里有一个基本的抽象类: public abstract class Group { public ParentGroup { get; set; } } 我有两门课是从小组中衍生出来的 public class LeafA : Group public class GroupB : Group 因此,这两个类都可以访问ParentGroup属性 我试图递归地为每个派生类分配ParentGroup属性。注意:GroupB有一个列表组件,可以保存Group类型的元素 public
public abstract class Group
{
public ParentGroup { get; set; }
}
我有两门课是从小组中衍生出来的
public class LeafA : Group
public class GroupB : Group
因此,这两个类都可以访问ParentGroup属性
我试图递归地为每个派生类分配ParentGroup属性。注意:GroupB有一个列表组件,可以保存Group类型的元素
public List<Group> Groups { get; set; }
这只是一个示例,但是如果我的GroupB GroupElement在组中有两个元素:1是GroupB,另一个是LeafA。GroupB可以容纳x个组,所以我想递归地遍历所有这些子组并分配ParentGroup。父组类似于->
GroupB -> Groups -> {Group1, Group2} (ParentGroup = GroupB)
希望这是清楚的。如果我能解释,请告诉我。您可能正在寻找类似以下内容的内容:
private void AssignParentGroup(Group groupElement, Group parentGroup)
{
// the groupElement has always a ParentGroup property. assign it.
groupElement.ParentGroup = parentGroup;
// if the class is a GroupB, then is has subGroups. Pass the groupElement as parent.
if(groupElement is GroupB groupB)
foreach(var subGroup in groupB.Groups)
AssignParentGroup(subGroup, groupElement);
}
可以这样说:
AssignParentGroup(someGroup, null);
或者为第一次调用设置parentGroup
参数默认值null
:
private void AssignParentGroup(Group groupElement, Group parentGroup = null)
您可以扩展此代码,并检查当它是一个
LeafA
类时要做什么您可能正在寻找以下内容:
private void AssignParentGroup(Group groupElement, Group parentGroup)
{
// the groupElement has always a ParentGroup property. assign it.
groupElement.ParentGroup = parentGroup;
// if the class is a GroupB, then is has subGroups. Pass the groupElement as parent.
if(groupElement is GroupB groupB)
foreach(var subGroup in groupB.Groups)
AssignParentGroup(subGroup, groupElement);
}
可以这样说:
AssignParentGroup(someGroup, null);
或者为第一次调用设置parentGroup
参数默认值null
:
private void AssignParentGroup(Group groupElement, Group parentGroup = null)
您可以扩展此代码,并检查当它是
LeafA
类时要做什么我将通过实现访问者模式来解决此问题
首先,我要将accept方法添加到我的抽象类中
public abstract class Group
{
public Group ParentGroup { get; set; }
public abstract void Accept(GroupVisitor visitor);
}
我将实现派生类的样板文件
public class LeafA : Group {
public override void Accept(GroupVisitor visitor){
visitor.Visit(this);
}
}
public class GroupB : Group
{
public List<Group> Groups {get;set;}
public override void Accept(GroupVisitor visitor) {
visitor.Visit(this);
}
}
因此,我们可以将父级分配给组层次结构,如下所示:
var visitor = new GroupVisitor(someGroup.ParentGroup);
someGroup.Accept(visitor);
这将处理LeafA和GroupB的父母分配。我将通过实现访问者模式来解决这个问题 首先,我要将accept方法添加到我的抽象类中
public abstract class Group
{
public Group ParentGroup { get; set; }
public abstract void Accept(GroupVisitor visitor);
}
我将实现派生类的样板文件
public class LeafA : Group {
public override void Accept(GroupVisitor visitor){
visitor.Visit(this);
}
}
public class GroupB : Group
{
public List<Group> Groups {get;set;}
public override void Accept(GroupVisitor visitor) {
visitor.Visit(this);
}
}
因此,我们可以将父级分配给组层次结构,如下所示:
var visitor = new GroupVisitor(someGroup.ParentGroup);
someGroup.Accept(visitor);
这将处理家长分配给LeafA和GroupB的任务。啊,我知道他要干什么了。删除我的答案啊,我明白他想干什么。删除我的答案