using System.Collections.Generic;
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 static void Main()
Console.WriteLine("Printed menu:");
private static void PrintMenu(IEnumerable<Menu> menuItems)
var vistedItems = new List<int>();
var menuItemsDic = menuItems.ToDictionary(item => item.Id, subItems => new List<Menu>());
foreach (var item in menuItems)
if (menuItemsDic.TryGetValue(item.ParentId, out subItems))
menuItemsDic[item.ParentId].Add(item);
foreach (var item in menuItems)
void PrintSubItems(Menu item, int level)
Console.WriteLine(string.Concat(Enumerable.Repeat(indent, level)) + item.Name);
List<Menu> subItems = new List<Menu>();
if (menuItemsDic.TryGetValue(item.Id, out subItems))
foreach (var subItem in subItems)
PrintSubItems(subItem, level + 1);