ConsoleKeyInfo,问号和可移植性

Eri*_* J. 8 .net c# console-application

我有一个小C#控制台应用程序,它读取密钥并检查密钥是否是问号:

ConsoleKeyInfo ki = System.Console.ReadKey();
if (ki.ConsoleKey.Oem2) // Do something
Run Code Online (Sandbox Code Playgroud)

我Oem2通过查看调试器中实际分配的值来到达,因为没有用于问号的ConsoleKey代码.

现在我当然可以使用ki.KeyChar,但应用程序还需要响应不映射到字符的某些键(例如媒体键).检查两者ConsoleKey并KeyChar确定实际上已按下哪个键感觉不太优雅.另一方面,依靠Oem2总是映射到?所有情况和地区并不安全.

检查两个属性以确定实际按下了哪个键是最佳做法吗?

任何洞察为什么ConsoleKeyInfo以这种方式设计是值得赞赏的.

Yuc*_*uck 6

在这种情况下,您将不得不检查KeyChar == '?'.来自MSDN:

Oem2:OEM 2密钥(OEM特定).

所以你很幸运,因为它碰巧?在你的设备上.

该ConsoleKeyInfo结构提供KeyChar(Char值)以及Modifiers(枚举)来帮助您确定用户按下了哪些键.