使用循环和“干净”的代码添加多个层级的多个子元素

4
我有一个C#类,可以包含多个子级别的子元素。
手动添加子元素的代码如下:
CustomClass MyClass = new CustomClass(“something”, new List<CustomClass>());
//Level 1
MyClass.Children.Add(“something”, new List<CustomClass>());
//Level 2
MyClass.Children[0].Children.Add(“something”, new List<CustomClass>());
//Level 3
MyClass.Children[0].Children[0].Children.Add(“something”, new List<CustomClass>());

我该如何使用干净的循环来完成这个任务?像这样做,感觉不是很“对”:

for (var i = 0; i < 50; i++) {
   //Level 1
   if (i == 0)
        MyClass.Children.Add(“something”, new List<CustomClass>());
   //Level 2
   if (i == 1)
        MyClass.Children[0].Children.Add(“something”, new List<CustomClass>());
   //Level 3
   if (i == 2)
        MyClass.Children[0].Children[0].Children.Add(“something”, new List<CustomClass>());

    // and so on up to 50 levels in this case ...
}

重要更新:在每个级别上,我需要检查值是否已经存在,如果不存在,则添加它。

谢谢你的聆听!

我是一名初学者,请多多关照。


我不确定你所说的“值”是什么意思。你能举个例子说明每个级别需要进行的比较吗? - Matt Ellen
你需要检查该值是否存在于任何地方,还是仅在当前级别?@Matt Eilen的答案对于任何一种情况都适用,只需在添加之前添加检查,如果检查返回true,则返回。 - shuniar
1个回答

9
您可以使用递归方式实现:
void FillChildren(CustomClass lastChild, int levels)
{
    if(levels > 0)
    {
        CustomClass child = new CustomClass(“something”, new List<CustomClass>());
        FillChildren(child, levels-1);
        lastChild.Children.Add(“something”, child);
    }
}

您可以这样调用:

CustomClass MyClass = new CustomClass(“something”, new List<CustomClass>());

FillChildren(MyClass, 50);

谢谢您的回答,不太确定它是否能帮到我。我稍微更新了一下问题,错过了一个重要部分,非常抱歉!:( - Linus Jäderlund
我会发布一个更具体的问题,然后在这里发布URL。问题应该从一开始就更详细,再次抱歉! - Linus Jäderlund
以下是有关编程的内容:这里有更详细的问题描述:http://stackoverflow.com/questions/7474922/adding-multiple-unique-children-at-multiple-levels-with-one-or-more-loops-and-clty! - Linus Jäderlund

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接