Console.ReadKey正在退出之前处理最后一项

时间:2011-11-30 18:51:25

标签: c# console-application

我有一个小命令行实用程序,它读取用户输入并将所有输入添加到列表中。按下 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);

4 个答案:

答案 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();
}