public static void RunMenu(IList <Pair <string, Action> > menu) { for (;;) { Console.WriteLine(); Console.WriteLine("What do you want to do? (Esc to quit)"); for (int i = 0; i < menu.Count; i++) { Console.WriteLine(ParseHelpers.HexDigitChar(i + 1) + ". " + menu[i].Key); } ConsoleKeyInfo k; Console.WriteLine((k = Console.ReadKey(true)).KeyChar); if (k.Key == ConsoleKey.Escape || k.Key == ConsoleKey.Enter) { break; } else { int i = ParseHelpers.HexDigitValue(k.KeyChar); if (i > 0 && i <= menu.Count) { menu[i - 1].Value(); } } } }
public static int RunMenu(IList <Pair <string, Func <int> > > menu, IEnumerator <char> input = null) { var reader = input ?? ConsoleChars(); int errorCount = 0; for (;;) { Console.WriteLine(); Console.WriteLine("What do you want to do? (Esc to quit)"); for (int i = 0; i < menu.Count; i++) { Console.WriteLine(ParseHelpers.HexDigitChar(i + 1) + ". " + menu[i].Key); } Console.WriteLine("Space. Run all tests"); if (!reader.MoveNext()) { break; } char c = reader.Current; if (c == ' ') { for (int i = 0; i < menu.Count; i++) { Console.WriteLine(); ConsoleMessageSink.WriteColoredMessage(ConsoleColor.White, i + 1, menu[i].Key); errorCount += menu[i].Value(); } } else { int i = ParseHelpers.HexDigitValue(c); if (i > 0 && i <= menu.Count) { errorCount += menu[i - 1].Value(); } } } return(errorCount); }