我有一个小命令行实用程序,它读取用户输入并将所有输入添加到列表中。按下 Esc 键时,程序退出。但是,按下 Esc 键后,即使Escape键也被添加到列表中,然后程序退出。
如何阻止 Esc 键添加到列表中?
代码:
ConsoleKeyInfo cki;
List<string> stuffs = new List<string>();
Console.WriteLine("Press Escape (Esc) to quit the program.");
do {
cki = Console.ReadKey();
stuffs.Add(cki.Key.ToString());
Console.WriteLine();
} while(cki.Key != ConsoleKey.Escape);
Console.WriteLine("You have entered the following data:");
foreach(string stuff in stuffs)
Console.WriteLine(stuff);
答案 0 :(得分:5)
更改循环,以便在将值添加到列表之前检查该值。例如,它会循环相同,但在按下Escape时会中断:
while(true)
{
cki = Console.ReadKey();
if (cki.Key == ConsoleKey.Escape)
break;
stuffs.Add(cki.Key.ToString());
Console.WriteLine();
}
答案 1 :(得分:3)
检查循环内的转义键,但在处理之前:
do {
cki = Console.ReadKey();
if (cki.Key == ConsoleKey.Escape) break;
stuffs.Add(cki.Key.ToString());
Console.WriteLine();
} while(true);
答案 2 :(得分:2)
将do while循环放在头部,以便在检查条件之前不进行处理:
Console.WriteLine("Press Escape (Esc) to quit the program.");
cki = Console.ReadKey();
while(cki.Key != ConsoleKey.Escape) {
stuffs.Add(cki.Key.ToString());
cki = Console.ReadKey();
Console.WriteLine();
}
答案 3 :(得分:1)
或者你可以像这样简化一下......
while ((cki = Console.ReadKey()).Key != ConsoleKey.Escape)
{
stuffs.Add(cki.Key.ToString());
Console.WriteLine();
}