当我按下一个键 (r) 时,此片段输出两个字母。
string key = string.Empty;
key = Console.ReadKey().Key.ToString();
Console.WriteLine(key);
Console.ReadKey();
// Output: rR
为什么当我只按一次小写'r'时它会输出小写'r'和大写'R'?
当我按下一个键 (r) 时,此片段输出两个字母。
string key = string.Empty;
key = Console.ReadKey().Key.ToString();
Console.WriteLine(key);
Console.ReadKey();
// Output: rR
为什么当我只按一次小写'r'时它会输出小写'r'和大写'R'?
老问题,但认为这可能有用。
正如其他人所指出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();
如果您需要小写输出,只需稍作修改:
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();
小写字母r
是您从键盘上写的。您不会通过阅读它从控制台中删除它。而大写字母R
是Key
fromConsoleKeyInfo
结构的字符表示。如果您想准确阅读写入控制台的内容,请使用Console.Read()
或Console.ReadLine()
.
Key
-property 返回 enum 的值ConsoleKey
。枚举ConsoleKey
对每个非修饰键都有一个等效项(Alt、Shift 和 Ctrl;参见 enum ConsoleModifiers
)。因此,按下“R”键可以产生两种可能的标志。
另一个说明这一点的例子是当您按下4
按键上方的数字行时。这是ConsoleKey
D4。它可以是(见key.KeyChar
)4
或$
。还要注意-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
顺便说一句:按“R”或“r”时,我只会得到“R”。我将 C#6 与 .Net 4.7 一起使用。也许您正在使用一些较新或较旧的版本,它输出所有可能的字符而不是枚举值本身 on .ToString()
,就像 @me 一样。