using System.Collections.Generic;
private static readonly int rootMenuId = -1;
private static readonly string nestingDivisionPattern = "****";
private static readonly IList<Menu> MenuItems = new List<Menu>
new Menu(1, -1, "Menu1"),
new Menu(2, -1, "Menu2"),
new Menu(3, -1, "Menu3"),
public Menu(int id, int parentId, string name)
public int ParentId { get; }
public string Name { get; }
public bool HasBeenPrinted {get; set;} = false;
public int NestingLevel {get; set;} = 0;
public static void Main()
Console.WriteLine("Printed menu:");
private static void PrintMenu(IEnumerable<Menu> menuItems)
foreach(var item in menuItems){
PrintMenu(item, menuItems);
private static void PrintMenu(Menu currentMenu, IEnumerable<Menu> possibleChildrenMenuItems) {
if(!currentMenu.HasBeenPrinted) {
currentMenu.HasBeenPrinted = true;
String printableLine = "";
for (var i = 0; i < currentMenu.NestingLevel; i++)
printableLine += nestingDivisionPattern;
printableLine += currentMenu.Name;
Console.WriteLine(printableLine);
foreach(Menu possibleChildMenu in possibleChildrenMenuItems) {
if(possibleChildMenu.ParentId == currentMenu.Id) {
possibleChildMenu.NestingLevel = currentMenu.NestingLevel + 1;
PrintMenu(possibleChildMenu, possibleChildrenMenuItems);