0

当我按下一个键 (r) 时,此片段输出两个字母。

string key = string.Empty;
key = Console.ReadKey().Key.ToString();
Console.WriteLine(key);
Console.ReadKey();
// Output: rR

为什么当我只按一次小写'r'时它会输出小写'r'和大写'R'?

4

4 回答 4

0

老问题,但认为这可能有用。

正如其他人所指出Console.ReadKey()的那样,是否可以读取您输入的密钥并将其写入屏幕(在您Console.WriteLine()生效之前)。

如果你只是想读取输入而不是写入,你可以使用可选的 bool intercept 参数Console.ReadKey()来隐藏用户输入,然后再写入:

ConsoleKeyInfo cki = Console.ReadKey(true); // hiding input
Console.Write($"You pressed: {cki.Key}");

// press letter "a" (lower case)
// Output: You pressed: A
// i.e. no duplicated letter

Console.ReadLine();

链接到 MSDN 部分

如果您需要小写输出,只需稍作修改:

ConsoleKeyInfo cki = Console.ReadKey(true); // hiding input
Console.Write($"You pressed: {cki.Key.ToString().ToLower()}");
// press letter "a" (lower case)    
// Output: You pressed: a

Console.ReadLine();
于 2019-05-31T11:27:12.197 回答
0

小写字母r是您从键盘上写的。您不会通过阅读它从控制台中删除它。而大写字母RKeyfromConsoleKeyInfo结构的字符表示。如果您想准确阅读写入控制台的内容,请使用Console.Read()Console.ReadLine().

于 2018-06-15T07:23:52.907 回答
0

Console.ReadKey返回暴露类型属性的ConsoleKeyInfo对象。其中用大写字母的值表示。见下文。KeyConsoleKeyKeyenum

在此处输入图像描述

现在,在您的情况下,您首先阅读正在r使用的内容Console.ReadKey(),并且您正在输出使用Console.WriteLine将键值打印为的代码R

于 2018-06-15T07:24:15.027 回答
0

Key-property 返回 enum 的值ConsoleKey。枚举ConsoleKey对每个非修饰键都有一个等效项(Alt、Shift 和 Ctrl;参见 enum ConsoleModifiers)。因此,按下“R”键可以产生两种可能的标志。

另一个说明这一点的例子是当您按下4按键上方的数字行时。这是ConsoleKeyD4。它可以是(见key.KeyChar4$。还要注意-class 中显示按下的修改键Modifiers的属性。ConsoleKeyInfo

请参阅下面的示例来说明它:

var key = Console.ReadKey();//press 4
Console.WriteLine("ConsoleKey: " + key.Key); // D4
Console.WriteLine("Char: " + key.KeyChar); // 4
Console.WriteLine("ConsoleModifier: " + key.Modifiers); // 0
            
key = Console.ReadKey(); //press shift + 4
Console.WriteLine("ConsoleKey: " + key.Key); // D4
Console.WriteLine("Char: " + key.KeyChar); // $
Console.WriteLine("ConsoleModifier: " + key.Modifiers); // Shift

我从MSDN获取了一些信息

顺便说一句:按“R”或“r”时,我只会得到“R”。我将 C#6 与 .Net 4.7 一起使用。也许您正在使用一些较新或较旧的版本,它输出所有可能的字符而不是枚举值本身 on .ToString(),就像 @me 一样。

于 2018-06-15T07:39:32.163 回答