如何在C#中使用递归创建对象并引用其父对象?
更新:最初的想法是嵌套这些对象,但后来我意识到,在每个对象中都有一条祖先轨迹就足够了,因此标题已经修改 我想建立一个对象集合,我可以在开发时使用它(我的想法是将它们放入MongoDB集合),但我不知道如何进行多深度操作 此场景中的对象只有名称、id(自动递增)和每个对象父对象的正斜杠分隔字符串 我已设法使初始递归工作: id祖先姓名 一, / LFHVJULCA 二, /1/ OHOEKOOFZP 三, /1/2/ PIUHBACFJV 四, /1/2/3/ PYKUFZOHXS 五, /1/2/3/4/ UJFUYENSQV 六, /1/2/3/4/5/ SHLMWCKZUJ 七, /1/2/3/4/5/6/ SFBHLQXTZL 八, /1/2/3/4/5/6/7/ 啊 九, /1/2/3/4/5/6/7/8/ MKOODIMYXC 十, /1/2/3/4/5/6/7/8/9/ 奥诺佐伊 但我想要的是拥有第二或第三层次的祖先,这样每件物品都可以有更多的后代,更新其祖先,并将其自身添加到主收藏中 这就是我被困的地方。有什么建议吗如何在C#中使用递归创建对象并引用其父对象?,c#,class,recursion,nested,C#,Class,Recursion,Nested,更新:最初的想法是嵌套这些对象,但后来我意识到,在每个对象中都有一条祖先轨迹就足够了,因此标题已经修改 我想建立一个对象集合,我可以在开发时使用它(我的想法是将它们放入MongoDB集合),但我不知道如何进行多深度操作 此场景中的对象只有名称、id(自动递增)和每个对象父对象的正斜杠分隔字符串 我已设法使初始递归工作: id祖先姓名 一, / LFHVJULCA 二, /1/ OHOEKOOFZP 三, /1/2/ PIUHBACFJV 四, /1/2/3/ PYKUFZOHXS 五, /1/2
List<Thing> things;
int count;
void Main()
{
things = new List<Thing>();
count = 1;
int depth = 10;
int thingsPerThing = 3;
var thing = new Thing{ Ancestors = "/", id = count++, Name = "Name " + count};
things.Add(thing);
AddThing(depth, 0, thingsPerThing, thing);
things.Dump();
}
public class Thing
{
public int id{get;set;}
public string Ancestors{ get;set;}
public string Name{get;set;}
}
public void AddThing( int depth, int CurrentDepth, int thingsPerThing, Thing thing)
{
CurrentDepth++;
if( CurrentDepth < depth )
{
var newThing = CreateThing(thing);
things.Add( newThing );
AddThing( depth--, CurrentDepth, thingsPerThing, newThing);
}
}
public Thing CreateThing(Thing thing)
{
return new Thing{ Ancestors = thing.Ancestors + thing.id + "/", id = count++, Name = RandomString(10) };
}
列出事物;
整数计数;
void Main()
{
事物=新列表();
计数=1;
int深度=10;
int thingsPerThing=3;
var thing=newthing{祖先=“/”,id=count++,Name=“Name”+count};
事物。添加(事物);
AddThing(深度,0,thingsPerThing,thing);
事物。转储();
}
公共类事物
{
公共int id{get;set;}
公共字符串{get;set;}
公共字符串名称{get;set;}
}
public void AddThing(int-depth、int-CurrentDepth、int-thingsPerThing、Thing-Thing)
{
CurrentDepth++;
如果(当前深度<深度)
{
var newThing=CreateThing(thing);
添加(newThing);
添加内容(深度--、当前深度、内容、新内容);
}
}
公共事物创造事物(事物)
{
返回新事物{祖先=Thing.祖先+Thing.id++“/”,id=count++,Name=RandomString(10)};
}
您应该使用集合
一些实施示例:-
-
-
要获取节点的完整路径,您可以添加一个
path
属性,该属性向后遍历到节点的根。要获得节点列表(如果需要),您必须实现一个,您可以通过多种方式来实现,使用哪种方式取决于您想要的节点顺序(有关详细信息,请参阅链接)
如果你需要一个更复杂的藏书库,你可以考虑检查一下:-
-如何将树结构可视化为字符串?我已经修改了标题和文本以使其更有意义。感谢Adriano的链接-我以后一定会使用它们。我修改了标题和文本,因为我意识到我所追求的不是真正的嵌套,而是向主集合添加一个对象的能力,其祖先基于递归,因此不会有任何树。