Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding multiple children at multiple levels with a loop and "clean" code

Tags:

c#

loops

children

I have a C# Class that can contain multiple children at multiple levels.

Adding children manually would look something like this:

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

How would I do this with a clean loop instead? Doing it like this, doesn’t feel “right”:

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 ...
}

IMPORTANT UPDATE: At every level I need to check if the value already exists, if it doesn't, I add it.

Thank you for listening!

I'm a beginner so please be gentle.

like image 351
Linus Jäderlund Avatar asked Jan 19 '23 17:01

Linus Jäderlund


1 Answers

You could do it recursively:

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

Which you would call like so:

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

FillChildren(MyClass, 50);
like image 101
Matt Ellen Avatar answered Jan 30 '23 21:01

Matt Ellen