控制台.ReadKey正在处理退出前的最后一项
本文关键字:最后 一项 ReadKey 处理 退出 控制台 | 更新日期: 2023-09-27 18:16:10
我有一个很小的命令行实用程序,它读取用户输入并将所有输入添加到列表中。当按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);
更改循环,以便在将其添加到列表之前检查值。例如,此循环相同,但在按下Escape时中断:
while(true)
{
cki = Console.ReadKey();
if (cki.Key == ConsoleKey.Escape)
break;
stuffs.Add(cki.Key.ToString());
Console.WriteLine();
}
检查循环内的转义键,但在处理之前:
do {
cki = Console.ReadKey();
if (cki.Key == ConsoleKey.Escape) break;
stuffs.Add(cki.Key.ToString());
Console.WriteLine();
} while(true);
把你的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();
}
或者你可以像这样简化while…
while ((cki = Console.ReadKey()).Key != ConsoleKey.Escape)
{
stuffs.Add(cki.Key.ToString());
Console.WriteLine();
}