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的任务。

啊,我知道他要干什么了。删除我的答案啊,我明白他想干什么。删除我的答案