static IEnumerable <Menu> CreateItems(AbsoluteDirectoryPath currentDir, ILookup <IAbsolutePath, IAbsolutePath> folderToFiles, IShell shell) { var dirs = folderToFiles[currentDir].OfType <AbsoluteDirectoryPath>().OrderBy(f => f.Name); var files = folderToFiles[currentDir].OfType <AbsoluteFilePath>().OrderBy(f => f.Name); foreach (var dir in dirs) { yield return(Menu.Submenu( name: dir.Name.ToString() + Path.DirectorySeparatorChar, icon: Icons.Folder, submenu: CreateItems(dir, folderToFiles, shell).Concat())); } foreach (var file in files) { var f = file; yield return(Menu.Item( name: file.Name.ToString(), icon: Icons.GetFileIcon(f), action: () => shell.OpenWithDefaultApplication(f))); } }