public static MenuOptionKey?GetOptionKey(string menuLabel, IEnumerable <IMenuOption> menuOptions, MenuOptionKey?selectedOption, bool allowNull) { Setup(menuLabel, menuOptions, selectedOption); while (true) { var consoleKey = Console.ReadKey(true).Key; switch (consoleKey) { case ConsoleKey.Escape: case ConsoleKey.LeftArrow: if (allowNull) { return(TearDown(null)); } break; case ConsoleKey.Enter: case ConsoleKey.RightArrow: return(TearDown(MenuOptions[CurrentOptionIndex].Key)); default: if (IsMoveKey(consoleKey)) { continue; } if (TryParseToMenuOptionKey(consoleKey, out selectedOption) && MenuOptions.Any(mo => mo.Key == selectedOption)) { return(TearDown(selectedOption)); } break; } } }