Добавление нескольких детей на нескольких уровнях с помощью цикла и «чистого» кода - PullRequest
4 голосов
/ 19 сентября 2011

У меня есть класс 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 ...
}

ВАЖНОЕ ОБНОВЛЕНИЕ: на каждом уровне мне нужно проверять, существует ли уже значение, если его нет, я добавляю его.

Спасибо, что выслушали!

Я новичок, поэтому, пожалуйста, будьте осторожны.

1 Ответ

9 голосов
/ 19 сентября 2011

Вы можете сделать это рекурсивно:

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);
...